знакомство с zx80
Нашлось время для изучения ветхой машинки
[IMG]https://pp.userapi.com/c639122/v639122903/37019/cme61-KTY_Q.jpg[/IMG]
инфы нашлось не так уж и много, для начала попался [URL="http://www.sinclairzxworld.com/viewtopic.php?t=438"]этот тред[/URL]
Взял для удобства TASM 3.1 и тут первая засада: ворох ошибок при компиляции.
Текст фиксится:
[CODE]
; Zac test ASM program #1
; (c) 2012 Zac
;
;#define .BYTE .BYTE
;#define .WORD .WORD
;#define DEFM .TEXT
;#define ORG .ORG
;#define EQU .EQU
; ===========================================================
; Start of the Program
; ===========================================================
; Origin of a ZX81 file is always 16393
.ORG 16393
; System variables.
VERSN: .BYTE 0
E_PPC: .WORD 2
D_FILE: .WORD Display
DF_CC: .WORD Display+1 ; First character of display
VARS: .WORD Variables
DEST: .WORD 0
E_LINE: .WORD BasicEnd
CH_ADD: .WORD BasicEnd+4 ; Simulate SAVE "X"
X_PTR: .WORD 0
STKBOT: .WORD BasicEnd+5
STKEND: .WORD BasicEnd+5 ; Empty stack
BREG: .BYTE 0
MEM: .WORD MEMBOT
UNUSED1: .BYTE 0
DF_SZ: .BYTE 2
S_TOP: .WORD $0002 ; Top program line number
LAST_K: .WORD $FDBF
DEBOUN: .BYTE 15
MARGIN: .BYTE 55
NXTLIN: .WORD Line2 ; Next line address
OLDPPC: .WORD 0
FLAGX: .BYTE 0
STRLEN: .WORD 0
T_ADDR: .WORD $0C8D
SEED: .WORD 0
FRAMES: .WORD $F5A3
COORDS: .WORD 0
PR_CC: .BYTE $BC
S_POSN: .WORD $1821
CDFLAG: .BYTE $40
PRBUFF: ;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$76 ; 32 Spaces + Newline
.WORd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE $76
MEMBOT: .BYTE 0,0,0,0,0,0,0,0,0,0,$84,$20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 30 zeros
UNUNSED2: .WORD 0
; End of system variables
Program:
Line1: .BYTE $00,$01 ; Line 1
.WORD Line1End-Line1Text ; Line 1 length
Line1Text: .BYTE $EA ; REM
; ===========================================================
; Insert your program here....
; ===========================================================
LD A,1 ; start with 1
loop: ; label used for jump
RST 10H ; PRINT
INC A ; increment A
CP 36 ; stop at 36
JP NZ,loop ; if not 36, then goto/jump to LOOP
RET ; Return to BASIC
; Programme ├йquivalent en Basic
; 10 LET A = 1
; 20 PRINT CHR$(A)
; 30 LET A = A + 1
; 40 IF A <> 36 THEN GOTO 20
; 50 STOP
; ===========================================================
; That's it. End of user program
; ===========================================================
.BYTE $76 ; Newline
Line1End:
Line2: .BYTE $00,$02 ; Line 2
.WORD Line2End-Line2Text
Line2Text: .BYTE $F9,$D4 ; RAND USR
.BYTE $1D,$22,$21,$1D,$20 ; 16514
.BYTE $7E ; Number
.BYTE $8F,$01,$04,$00,$00 ; Numeric encoding
.BYTE $76 ; Newline
Line2End:
Display: .BYTE $76 ; Newline
.BYTE $76 ; Line 0
.BYTE $76 ; Line 1
.BYTE $76 ; Line 2
.BYTE $76 ; Line 3
.BYTE $76 ; Line 4
.BYTE $76 ; Line 5
.BYTE $76 ; Line 6
.BYTE $76 ; Line 7
.BYTE $76 ; Line 8
.BYTE $76 ; Line 9
.BYTE $76 ; Line 10
.BYTE $76 ; Line 11
.BYTE $76 ; Line 12
.BYTE $76 ; Line 13
.BYTE $76 ; Line 14
.BYTE $76 ; Line 15
.BYTE $76 ; Line 16
.BYTE $76 ; Line 17
.BYTE $76 ; Line 18
.BYTE $76 ; Line 19
.BYTE $76 ; Line 20
.BYTE $76 ; Line 21
.BYTE $76 ; Line 22
.BYTE $76 ; Line 23
; Variables area (empty)
Variables:
VariablesEnd: .BYTE $80
BasicEnd:
#END
[/CODE]
и получается готовый test.p
Сборка делается так:
tasm -80 -b -s main.asm TEST.P
Еще один облом - эмулятор EightyOne выдает не пойми что. Взял [URL="http://zx81.vb81.free.fr/"]vb81[/URL], установил дополнительные библиотеки, программа запустилась.
Пока мало что понятно с исходным текстом, зачем используется NewLine($76)?
Попробую разобраться, вывод символов через rst 16 никак не решение.