Важная информация
RSS лента

Shiny

знакомство с zx80

Оценить эту запись
Нашлось время для изучения ветхой машинки

инфы нашлось не так уж и много, для начала попался этот тред

Взял для удобства TASM 3.1 и тут первая засада: ворох ошибок при компиляции.
Текст фиксится:

Код:
; 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
и получается готовый test.p
Сборка делается так:
tasm -80 -b -s main.asm TEST.P

Еще один облом - эмулятор EightyOne выдает не пойми что. Взял vb81, установил дополнительные библиотеки, программа запустилась.
Пока мало что понятно с исходным текстом, зачем используется NewLine($76)?
Попробую разобраться, вывод символов через rst 16 никак не решение.
Метки: coding, retro, zx80 Добавить / редактировать метки
Категории
Без категории

Комментарии

  1. Аватар для NEO SPECTRUMAN
    [quote="Шынни"]зачем используется NewLine($76)?[/quote]
    дык это halt
    он же "конец строки" для экономии памяти
    ты же смотрел как(каким кодом) происходит рисование(низкоуровневое) экрана? (в eihtyone это прекрасно видно)

    загрузка с ленты дубовая
    всегда с одного адреса
    в начале ее куча системных переменных (я те кидал ссылки где они расжованы)
    [CODE]---Begin of Save Area---
    4009 VERSN Should be 00h to identify ZX81 cassette files (FFh=Lambda)
    400A E_PPC Line Number of currently selected line [>] Cursor
    400C D_File Pointer to Video Memory (BG Map) / End of Basic Program
    400E DF_CC Pointer to VRAM Address for PRINT
    4010 VARS Pointer to BASIC Variables Area
    4012 DEST Pointer to Variable when assigning a value to it
    4014 E_LINE Pointer to Input Buffer/Workspace, and to --End of Save Area--
    4016 CH_ADD Pointer to next interpreted character
    4018 X_PTR Pointer to character prior to [S] Symbol (=Syntax Error) (or
    ptr to aborted/breaked line)
    401A STKBOT Pointer to BASIC Calculator Stack / End of
    Input Buffer/Workspace
    401C STKEND Pointer to bottom of Machine Stack / End of Calculator Stack
    401E BERG Calculator B-Register
    401F MEM Pointer to Calculator Memory (usually same as MEMBOT)
    4021 - Not used
    4022 DF_SZ Number of lines in lower display section (including 1 blank
    line)
    4023 S_TOP Line Number of first line for automatic LISTing
    4025 LAST_K Keyboard - Recently pressed key (4025=row, 4026=shift/column)
    4027 DEBOUN Keyboard - Debounce State (key release delay)
    4028 MARGIN Vertical Border Height (55 lines at top/bottom for 50Hz,
    31 for 60Hz)
    4029 NXTLIN Address of next BASIC line which is to be executed,
    pointing to a byte >=40h when stopped, indicates
    autostart address in cassette files.
    402B OLDPPC Line Number for CONT
    402D FLAGX Various Flags
    Bit0 used (purpose unknown)
    Bit1 used (purpose unknown)
    Bit2-4 not used
    Bit5 used (purpose unknown)
    Bit6 used (purpose unknown)
    Bit7 not used
    402E STRLEN Length of string during assignment
    4030 T_ADDR Pointer to next item in Syntax Table (or INPUT's old S_POSN)
    4032 SEED Random Number Seed
    4034 FRAMES Decrementing Video Frame Counter (Bit15: 0=PAUSE, ie.
    display ON, program PAUSEd)
    4036 COORDS X-Coordinate of last PLOT, Y-Coordinate of last PLOT
    4038 PR_CC Least significant byte of PRBUFF printer buffer pointer
    4039 S_POSN X-Coordinate for PRINT, Y-Coordinate for PRINT
    403B CDFLAG Various Flags
    Bit7: Current Speed (1=SLOW (Display Enable), 0=FAST)
    Bit6: Requested Speed (or old speed during
    pause/cassette io, etc)
    Bit5-1: Not used
    Bit0: Keystroke (0=None, 1=Yes)
    403C PRBUFF Printer Buffer 32 characters + NEWLINE (76h)
    405D MEMBOT Default workspace for BASIC Calculator
    407B - Not used (2 bytes)[/CODE]

    там же задается адрес видео памяти
    по этому добавляется вот это
    [CODE]Display: .BYTE $76 ; Newline
    .BYTE $76 ; Line 0
    .BYTE $76 ; Line 1
    .BYTE $76 ; Line 2
    .BYTE $76 ; Line 3
    .BYTE Line 4[/CODE]

    видео память которая появится на экране сразу после загрузки программы

    а eightyone отличный эмуль
    но отладчик в нем дубовый неимоверно
    и во время дебаганья не происходит нормальная отрисовка происходящего
    только рисуемая в этот момент строка обновляется и расположенная она всегда в самом верху


    ЗЫ у zx80 все совсем по другому
    zx80 и zx81 не совместимы в плане загрузки своего кода в память
    хотя без лишних обращений к пзу совместимую для обоих машин прогу написать можно

    да и pseudo hires для каждой машины нужно делать по своему...
    да и стандартные шрифты по моему не очень совместимы между собой...
    Обновлено 13.07.2017 в 16:22 NEO SPECTRUMAN
  2. Аватар для Shiny
    NEO SPECTRUMAN,спасибо, нашел эту инфу. EightyOne никак не ест эти .p (

    Кстати, а реально сделать двойной буффер, записывая значения в D_File?
  3. Аватар для NEO SPECTRUMAN
    [quote="Шынни"]Кстати, а реально сделать двойной буффер, записывая значения в D_File?[/quote]
    Попробуй (я не делал)
    Лучше вообще отказаться от ПЗУ (практически)
    и рисовать что хош своей процедурой
    хоть двойной буффер
    хоть тройной
    хоть восьмерной...
    хоть аппаратный скролл по 2-м осям(по крайней мере по одной полноценный)

    правда памяти маловато у стоковой машины для этого...
    Обновлено 13.07.2017 в 17:27 NEO SPECTRUMAN
  4. Аватар для NEO SPECTRUMAN
    [COLOR="#808080"]Кстате там у буржуев есть всякие доработки для zx81
    для сокращения времени простоя проца при выполнении прерывания (что то такое)

    так что
    совмещать в одном кадре строки нарисованный без прерываний (просто с точной растактовкой на 207 тактов)
    и строки с синхронизацией по инту

    думаю, в расчете на работоспособность на таких машинах, не сильно безопасно...
    яхз когда появилась эта доработка и на каком количестве машин она применена

    [/COLOR]
    а может это было для новодельных zx80 расширенных до zx81
    не могу найти статью щас...
    Обновлено 13.07.2017 в 17:45 NEO SPECTRUMAN
  5. Аватар для Shiny
    ок попробую, как время будед
  6. Аватар для NEO SPECTRUMAN
    У меня твой сорец запустился из коробки в eightyone
    при том я скомпилировал sjasm-ом

    короче на вид мож менять когда захочеш
    пзу те даже vsync сделает

    [CODE]
    device zxspectrum48
    org $4009

    VERSN: defb 0
    E_PPC: defw 2
    D_FILE: defw Display
    DF_CC: defw Display+1 ; First character of display
    VARS: defw Variables
    DEST: defw 0
    E_LINE: defw BasicEnd
    CH_ADD: defw BasicEnd+4 ; Simulate SAVE "X"
    X_PTR: defw 0
    STKBOT: defw BasicEnd+5
    STKEND: defw BasicEnd+5 ; Empty stack
    BREG: defb 0
    MEM: defw MEMBOT
    UNUSED1: defb 0
    DF_SZ: defb 2
    S_TOP: defw $0002 ; Top program line number
    LAST_K: defw $FDBF
    DEBOUN: defb 15
    MARGIN: defb 55
    NXTLIN: defw Line2 ; Next line address
    OLDPPC: defw 0
    FLAGX: defb 0
    STRLEN: defw 0
    T_ADDR: defw $0C8D
    SEED: defw 0
    FRAMES: defw $F5A3
    COORDS: defw 0
    PR_CC: defb $BC
    S_POSN: defw $1821
    CDFLAG: defb $40
    PRBUFF: ;defb 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
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    defb $76
    MEMBOT: defb 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: defw 0

    ; End of system variables

    Program:
    Line1: defb $00,$01 ; Line 1
    defw Line1End-Line1Text ; Line 1 length
    Line1Text: defb $EA ; REM

    ; ===========================================================
    ; Insert your program here....


    lppp ld hl,Display
    ld (D_FILE),hl
    ld hl,Display2
    ld (D_FILE),hl
    jp lppp

    ; ===========================================================

    LD A,1 ; start with 1
    loop: ; label used for jump
    RST $10 ; 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
    ; ===========================================================

    defb $76 ; Newline
    Line1End:
    Line2: defb $00,$02 ; Line 2
    defw Line2End-Line2Text
    Line2Text: defb $F9,$D4 ; RAND USR
    defb $1D,$22,$21,$1D,$20 ; 16514
    defb $7E ; Number
    defb $8F,$01,$04,$00,$00 ; Numeric encoding
    defb $76 ; Newline
    Line2End:

    Display: defb $76 ; Newline
    defb $76 ; Line 0
    defb $76 ; Line 1
    defb $76 ; Line 2
    defb $76 ; Line 3
    defb $76 ; Line 4
    defb $76 ; Line 5
    defb $76 ; Line 6
    defb $76 ; Line 7
    defb $76 ; Line 8
    defb $76 ; Line 9
    defb $76 ; Line 10
    defb $20,$21,$22,$23,$24,$25,$76 ; Line 11
    defb $76 ; Line 12
    defb $76 ; Line 13
    defb $76 ; Line 14
    defb $76 ; Line 15
    defb $76 ; Line 16
    defb $76 ; Line 17
    defb $76 ; Line 18
    defb $76 ; Line 19
    defb $76 ; Line 20
    defb $76 ; Line 21
    defb $76 ; Line 22
    defb $76 ; Line 23

    Display2: defb $76 ; Newline
    defb $76 ; Line 0
    defb $76 ; Line 1
    defb $76 ; Line 2
    defb $76 ; Line 3
    defb $76 ; Line 4
    defb $76 ; Line 5
    defb $20,$21,$22,$23,$24,$25,$76 ; Line 11
    defb $76 ; Line 7
    defb $76 ; Line 8
    defb $76 ; Line 9
    defb $76 ; Line 10
    defb $20,$21,$22,$23,$24,$25,$76 ; Line 11
    defb $76 ; Line 12
    defb $76 ; Line 13
    defb $76 ; Line 14
    defb $76 ; Line 15
    defb $76 ; Line 16
    defb $76 ; Line 17
    defb $20,$21,$22,$23,$24,$25,$76 ; Line 11
    defb $76 ; Line 19
    defb $76 ; Line 20
    defb $76 ; Line 21
    defb $76 ; Line 22
    defb $76 ; Line 23

    ; Variables area (empty)
    Variables:
    VariablesEnd: defb $80
    BasicEnd:

    endfile


    savebin "1.p", $4009, endfile[/CODE]
  7. Аватар для NEO SPECTRUMAN

    последний eightyone
    брать тут
    [url]https://sourceforge.net/projects/eightyone-sinclair-emulator/[/url]
  8. Аватар для Shiny
    не качается Eighty One ( К чему такой замысловатый формат .p?
  9. Аватар для NEO SPECTRUMAN
    [quote="Шынни"]не качается[/quote]
    ага что то да...
    ...
    щас скачал от туда же с зеркала free France.

    ...
    только там не оказалось нужных пзу-шек
    закинул со старой версии

    ...а дебагер как был никаким
    так и остался...
    Обновлено 13.07.2017 в 19:05 NEO SPECTRUMAN
  10. Аватар для NEO SPECTRUMAN
    [quote="Шынни"]( К чему такой замысловатый формат .p?[/quote]
    по моему это тоже самое что сказать
    К чему такой замысловатый формат gb?
    или например rk
    ...тысячи их

Трекбэков