许多人会同意,新兴的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内存,因此您需要考虑编写哪个程序。也许有一天我会写。