Emulasi Sinclair zx80 / ​​zx81

gambar

Banyak yang akan setuju bahwa pandemi COVID-19 yang muncul telah cukup merusak kehidupan komunitas TI. Tapi kita tidak akan berbicara tentang strip gelap, tetapi tentang episode lain.

Sudah pada bulan Maret, Forever 2020 yang terkenal dengan demokrasi itu dibatalkan , dan kemudian acara itu ditunda hingga musim gugur. Jauh sebelum pembatalan, saya berbicara dengan panitia. Mereka menolak untuk menerima salah satu pekerjaan saya, menjelaskan bahwa tidak ada Apple II, dan sebagai imbalannya meminta video karya dari komputer asli.

Yah, saya tidak bisa mendapatkan catatan, jadi saya perhatikan daftar platform:
Amstrad CPC, Thomson, PMD-85, MSX, ZX81, Sam Coupe, semua non-C = 64 Commodores 8-bit atau sistem 8-bit lainnya

Saya tertarik pada ZX81, karena saya sudah mencoba mempelajari komputer, tetapi jatuh.

Penelitian berjalan sesuai dengan pola saya yang biasa:

Emulator


Saya memilih EightyOne
mengambil versi 1.6.1. Versi ini memiliki debugger yang mudah digunakan, tetapi program ini tidak meniru model lain - ZX80, kemudian saya menemukan versi 3,7.

Salib berarti


Pencarian dibawa ke FASM ( topik di forum yang disesuaikan untuk platform. Namun, contoh yang dikompilasi tidak dimulai. Saya mencoba opsi assembler lainnya - Pasmo dan lainnya, tetapi masih tidak mengkompilasi program kerja.

Pencarian lama membawa contoh pencetakan Halo, dunia!

, keajaiban! ternyata! Sekarang giliran telah datang ke episode ketiga.

Dokumentasi


Sebagian informasinya ditemukan di sini.
Disassembler ROM di sini.

Kartu memori:

0000-1FFF - ROM
2000-3FFF - Shadow ROM.   ,   Interface 1
4000-7FFF -  16

Sebagian dari memori dicadangkan untuk variabel sistem .

Selanjutnya, pada 16509, program BASIC dan variabel-variabelnya disimpan.

Program pada BASIC berisi format:

2      big endian
2   
...  
1  ($76) -  

Untuk kaset, hanya program BASIC yang dimungkinkan; metode ini diusulkan:

1 REM (    )
2 RANDOMIZE USR(16514) -    ,   REM

Anda harus memperhatikan variabel sistem D_FILE, yang menunjukkan memori video.

Dalam contoh yang ditunjukkan, ini diterapkan sebagai berikut:

D_FILE:     defw    display_file

display_file:   defb    _NL
        defs    32
...
        defs    32
        defb    _NL

Byte pertama adalah tanda awal baris, kemudian 32 byte adalah spasi.

Ternyata 24 baris, yang tampak tebal.

Program pertama yang saya tulis:

gambar

;compile with sjasmplus
	device zxspectrum128

p_start:    org 0x4009
begin

VERSN:      defb    0
E_PPC:      defw    20      ; BASIC line number of line with cursor.
D_FILE:     defw    display_file2
DF_CC:      defw    display_file2+1
VARS:       defw    variables
DEST:       defw    0
E_LINE:     defw    edit_line
CH_ADD:     defw    p_end-1
X_PTR:      defw    0
STKBOT:     defw    p_end
STKEND:     defw    p_end
BERG:       defb    0
MEM:        defw    MEMBOT
SPARE1:     defb    0
DF_SZ:      defb    2       ; Number of lines in lower part of screen.
S_TOP:      defw    10      ; BASIC line number of line at top of screen.
LAST_K:     defw    0xffff
DB_ST:      defb    0
MARGIN:     defb    55      ; Blank lines above/below TV picture: US = 31, UK = 55.
NXTLIN:     defw    display_file    ; Memory address of next program line to be executed.
OLDPPC:     defw    0
FLAGX:      defb    0
STRLEN:     defw    0
T_ADDR:     defw    0x0c8d
SEED:       defw    0
FRAMES:     defw    0       ; Updated once for every TV frame displayed.
COORDS:     defw    0
PR_CC:      defb    0xbc
S_POSN:     defb    0x21,0x18
CDFLAG:     defb    0x40
PRBUF:      defs    0x20
        defb    _NL
MEMBOT:     defs    0x1e
SPARE2:     defw    0

; Start of the BASIC area for user programs.

basic_0001: defb    0,1     ; 1 REM
        defw    basic_0010-basic_0001-4
        defb    _REM

; Start of user machine code program
mem_16514:
	ld hl,p_end;display_file2
	push hl
;cls
	ld c,25
c1:
	ld b,32
	ld (hl),$76:inc hl
c2:
	ld (hl),0:inc hl
	djnz c2
	dec c
	jr nz,c1

	pop hl
	push hl
	ld c,$0
ylp:
	ld (hl),$76
	inc hl
	ld b,32
xlp:
	ld (hl),c
	inc hl
	inc c

	bit 6,c
	jr nz,endp;ret nz
	djnz xlp
	jr ylp
endp:
	pop hl
	ld (D_FILE),hl
	jr $
display_file2:
 dup 25
 defb _NL
 edup


end
	display /d,end-begin
	savebin "prb.p",begin,end-begin

Versi singkat menyarankan topik ini .

Satu kekurangan: setelah memuat program, intinya tidak ditampilkan. Ini tidak mengherankan, karena garis-garisnya kosong. Membaca manual menyarankan perubahan lain:

NXTLIN:     defw    basic_0010 ;    

Ternyata trik sederhana: setelah memuat, Anda tidak perlu mengetik RUN, program akan mulai dengan sendirinya.

Singkatnya, saya akan menjelaskan esensi program: pertama mengisi memori video sesuai dengan model, seperti yang ada di program pencetakan "Hello, world", kemudian mengisi garis dengan karakter dengan kode 00-63.

gambar

Pada perkembangan pertama, saya membuat kesalahan dan menulis karakter mengisi dengan kode 00-255, tetapi program tidak bekerja, sebagai bagian dari kode tidak digunakan.
Hasil penelitian adalah karya kerr , yang tampaknya tidak menarik, tetapi bagi saya program itu sendiri merupakan pencapaian yang hebat.

Dan sebelum negara demokrasi, ada banyak waktu yang akan dihabiskan untuk mengembangkan program dalam nominasi 1k.

Tetap ZX80.

Ada urutan variabel sistem yang berbeda untuknya.

Perangkat lunak disimpan di sini .

Oleh karena itu, saya mengetik program dan mencari di dalam debugger:

gambar

Ada sedikit batasan di sini - memori 1k, jadi Anda perlu memikirkan program mana yang akan ditulis.

Mungkin saya akan menulis suatu hari nanti.

All Articles