знакомство с zx80
Нашлось время для изучения ветхой машинки
инфы нашлось не так уж и много, для начала попался этот тред
Взял для удобства TASM 3.1 и тут первая засада: ворох ошибок при компиляции.
Текст фиксится:
и получается готовый test.pКод:; 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
Сборка делается так:
tasm -80 -b -s main.asm TEST.P
Еще один облом - эмулятор EightyOne выдает не пойми что. Взял vb81, установил дополнительные библиотеки, программа запустилась.
Пока мало что понятно с исходным текстом, зачем используется NewLine($76)?
Попробую разобраться, вывод символов через rst 16 никак не решение.
Комментарии
Трекбэков
Всего трекбэков 0
Ссылка трекбэка: