Sinclair zx80 /​​ zx81仿真

图片

许多人会同意,新兴的COVID-19大流行已经大大破坏了IT社区的生活。但是我们不会谈论暗带,而是谈论另一集。

早在3月,著名的民主党永久性2020年就已取消,后来该活动推迟到了秋天。在取消之前很久,我与组织者进行了交谈。他们拒绝接受我的一份工作,解释说没有Apple II,并要求从真实计算机上获得工作录像。

好吧,我无法获得记录,所以我注意到了平台列表:
Amstrad CPC,Thomson,PMD-85,MSX,ZX81,Sam Coupe,所有非C = 64 8位Commodores或任何其他8位系统

ZX81吸引了我,因为我已经在尝试学习计算机,但是当机了。

研究按照我惯常的方式进行:

仿真器


我选择了AugyOne,
版本为1.6.1。该版本具有一个方便的调试器,但是该程序无法模拟其他模型-ZX80,后来我发现了另一个版本3.7。

十字指


搜索被带到FASM(适合该平台的论坛上的一个主题。但是,编译后的示例并未开始。我尝试了其他汇编程序选项(例如Pasmo等),但未编译工作程序。

长时间搜索带来了打印 Hello,world!

示例,奇迹!原来!现在轮到第三集了。

文献资料


这里找到部分信息在这里可以看到
反汇编ROM :存储卡:



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

内存的一部分保留给系统变量使用

此外,在16509,存储了BASIC程序及其变量。

BASIC上的程序包含以下格式:

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

对于盒式磁带,只能使用BASIC程序;建议使用以下方法:

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

您应注意系统变量D_FILE,它指示视频内存。

在所示的示例中,此实现如下:

D_FILE:     defw    display_file

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

第一个字节是该行开头的符号,然后32个字节是空格。

原来有24行,看起来很庞大。

我写的第一个程序:

图片

;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

简短的版本建议使用此主题

缺点之一:加载程序后,不显示底行。这并不奇怪,因为这些行是空的。阅读手册提出了另一个更改:

NXTLIN:     defw    basic_0010 ;    

事实证明,这样的技巧很简单:加载后,您无需键入RUN,程序将自行启动。

简而言之,我将描述程序的本质:首先按照模型填充视频存储器,就像在打印程序“ Hello,world”中那样,然后用代码00-63填充行。

图片

在第一个开发中,我犯了一个错误并用代码00-255编写了填充字符,但由于未使用该代码的一部分,该程序无法正常工作
研究的结果是kerr的工作,这似乎没什么意思,但对我来说程序本身就是一个伟大的成就。

在演示派对之前,有很多时间将花费在开发1k提名中的程序上。

仍为ZX80。系统变量的

顺序不同

软件存储在这里

因此,我键入了程序并在调试器中查看:

图片

这里有一个小限制-1k内存,因此您需要考虑编写哪个程序。

也许有一天我会写。

All Articles