Muchos estarán de acuerdo en que la pandemia emergente de COVID-19 ha echado a perder la vida de la comunidad de TI. Pero no hablaremos de una franja oscura, sino de otro episodio.Ya en marzo, la famosa demoparty Forever 2020 fue cancelada , y más tarde el evento se pospuso para el otoño. Mucho antes de la cancelación, hablé con los organizadores. Se negaron a aceptar uno de mis trabajos, explicando que no había Apple II, y pidieron a cambio un video de trabajo desde una computadora real.Bueno, no pude obtener el registro, así que noté la lista de plataformas:Amstrad CPC, Thomson, PMD-85, MSX, ZX81, Sam Coupe, todos los Commodores de 8 bits que no son C = 64 o cualquier otro sistema de 8 bitsMe atrajo el ZX81, ya que ya estaba tratando de aprender la computadora, pero me caí.La investigación fue de acuerdo con mi patrón habitual:Emulador
Elegí EightyOnetomó la versión 1.6.1. La versión tiene un depurador conveniente, pero el programa no emula otro modelo: ZX80, más tarde encontré otra compilación 3.7.Cruz significa
La búsqueda trajo a FASM (un tema en el foro adaptado para la plataforma. Sin embargo, los ejemplos compilados no comenzaron. Probé otras opciones de ensamblador - Pasmo y otros, pero no compilé un programa de trabajo.Las búsquedas largas trajeron un ejemplo de impresión ¡Hola, mundo!¡Milagro! Resultó que ahora ha llegado el tercer episodio.Documentación
Se encontró parte de la información aquí.ROM de desensamblador aquí.Tarjeta de memoria:0000-1FFF - ROM
2000-3FFF - Shadow ROM. , Interface 1
4000-7FFF - 16
Parte de la memoria está reservada para las variables del sistema .Además, en 16509, el programa BASIC y sus variables se almacenan.El programa en BASIC contiene el formato:2 big endian
2
...
1 ($76) -
Para un casete, solo son posibles los programas BÁSICOS; se propuso este método:1 REM ( )
2 RANDOMIZE USR(16514) - , REM
Debe prestar atención a la variable del sistema D_FILE, que indica la memoria de video.En el ejemplo indicado, esto se implementa de la siguiente manera:D_FILE: defw display_file
display_file: defb _NL
defs 32
...
defs 32
defb _NL
El primer byte es un signo del comienzo de la línea, luego 32 bytes son espacios.Resultó 24 líneas, que parecían voluminosas.El primer programa que escribí:
;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
Una versión abreviada sugirió este tema .Un inconveniente: después de cargar el programa, no se muestra el resultado final. Esto no es sorprendente, porque las líneas están vacías. Leer los manuales sugirió otro cambio:NXTLIN: defw basic_0010 ;
Resultó un truco tan simple: después de cargar, no necesita escribir RUN, el programa se iniciará solo.En resumen, describiré la esencia del programa: primero llenando la memoria de video de acuerdo con el modelo, como estaba en el programa de impresión "Hola, mundo", luego llenando las líneas con caracteres con los códigos 00-63.
En el primer desarrollo, cometí un error y escribí caracteres de relleno con los códigos 00-255, pero el programa no funcionó, ya que parte de los códigos no se utilizan.El resultado de la investigación fue el trabajo de kerr , lo que parecería poco interesante, pero para mí el programa en sí es un gran logro.Y antes de la fiesta de demostración, se dedicará mucho tiempo a desarrollar un programa en la nominación de 1k.Sigue siendo ZX80.Hay un orden diferente de variables del sistema para ello..El software se almacena aquí .Por lo tanto, escribí el programa y busqué en el depurador: aquí
hay una ligera limitación: memoria de 1k, por lo que debe pensar qué programa escribir.Tal vez te escriba algún día.