mirror of https://github.com/zxdos/zxuno.git
rtc
This commit is contained in:
parent
9c12b7e15b
commit
123d92590c
Binary file not shown.
BIN
SD/SYS/RTC.SYS
BIN
SD/SYS/RTC.SYS
Binary file not shown.
|
|
@ -39,6 +39,7 @@
|
|||
define dma_len $a4 ; ZX-UNO register to set DMA length
|
||||
define dma_prob $a5
|
||||
define dma_stat $a6
|
||||
define i2creg $f8
|
||||
define ad724 $fb
|
||||
define core_addr $fc
|
||||
define core_boot $fd
|
||||
|
|
|
|||
|
|
@ -49,7 +49,9 @@ BINS=\
|
|||
BACKUP\
|
||||
CORCLEAN\
|
||||
COREBIOS\
|
||||
MC\
|
||||
ZX1\
|
||||
SETDATE\
|
||||
RTC.SYS\
|
||||
ROMSBACK\
|
||||
ROMSUPGR\
|
||||
UPGR16M\
|
||||
|
|
@ -188,7 +190,7 @@ build/UPGRADE: $(srcdir)/upgrade.asm\
|
|||
$(AS) $(AFLAGS) --raw=$@ $<
|
||||
|
||||
|
||||
build/MC: $(srcdir)/mc.asm\
|
||||
build/ZX1: $(srcdir)/zx1.asm\
|
||||
$(INCLUDEDIR)/zxuno.def\
|
||||
$(INCLUDEDIR)/esxdos.def\
|
||||
$(INCLUDEDIR)/Print.inc\
|
||||
|
|
@ -197,6 +199,19 @@ build/MC: $(srcdir)/mc.asm\
|
|||
| build
|
||||
$(AS) $(AFLAGS) --raw=$@ $<
|
||||
|
||||
build/SETDATE: $(srcdir)/setdate.asm\
|
||||
$(INCLUDEDIR)/zxuno.def\
|
||||
$(INCLUDEDIR)/esxdos.def\
|
||||
$(INCLUDEDIR)/Print.inc\
|
||||
| build
|
||||
$(AS) $(AFLAGS) --raw=$@ $<
|
||||
|
||||
build/RTC.SYS: $(srcdir)/rtc.asm\
|
||||
$(INCLUDEDIR)/zxuno.def\
|
||||
$(INCLUDEDIR)/esxdos.def\
|
||||
| build
|
||||
$(AS) $(AFLAGS) --raw=$@ $<
|
||||
|
||||
build/ZXUNOCFG: $(srcdir)/zxunocfg.asm\
|
||||
$(INCLUDEDIR)/zxuno.def\
|
||||
| build
|
||||
|
|
|
|||
152
utils/mc.asm
152
utils/mc.asm
|
|
@ -1,152 +0,0 @@
|
|||
; mc.asm - multicore load any .ZX1 core on slot 9 or 45.
|
||||
; File must exists in current directory. It must be run while using a "root" mode ROM.
|
||||
;
|
||||
; Copyright (C) 2022 Antonio Villena
|
||||
;
|
||||
; This program is free software: you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation, version 3.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
;
|
||||
; Compatible compilers:
|
||||
; SjAsmPlus, <https://github.com/z00m128/sjasmplus>
|
||||
|
||||
; output MC
|
||||
define plugin 0
|
||||
|
||||
include zxuno.def
|
||||
include esxdos.def
|
||||
|
||||
IF plugin=1
|
||||
org $8000 ; comienzo requerido si es plugin del navegador
|
||||
jr NoPrint
|
||||
db 'BP', 0, 0, 0, 0, 'MC plugin - antoniovillena', 0
|
||||
|
||||
ELSE
|
||||
org $2000 ; comienzo de la ejecución de los comandos ESXDOS
|
||||
Main ld a, h
|
||||
or l
|
||||
jr nz, NoPrint ; si no se ha especificado nombre de fichero, imprimir uso
|
||||
call Print
|
||||
dz '.mc corefile.zx1', 13, 13, 'Loads and executes a core'
|
||||
ret
|
||||
ENDIF
|
||||
|
||||
NoPrint ld de, FileName
|
||||
NextChar ld a, (hl)
|
||||
or a
|
||||
jr z, EndParse
|
||||
cp ' '
|
||||
jr c, EndParse
|
||||
ldi
|
||||
jr NextChar
|
||||
EndParse xor a
|
||||
ld (de), a
|
||||
ld bc, zxuno_port
|
||||
out (c), a
|
||||
inc b
|
||||
in f, (c)
|
||||
jp p, Nonlock
|
||||
call Print
|
||||
dz 'ROM not rooted'
|
||||
ret
|
||||
Nonlock wreg flash_cs, 0 ; activamos spi, enviando un 0
|
||||
wreg flash_spi, $9f ; jedec id
|
||||
in a, (c)
|
||||
in a, (c)
|
||||
in a, (c)
|
||||
in a, (c)
|
||||
wreg flash_cs, 1 ; desactivamos spi, enviando un 1
|
||||
sub $18
|
||||
jr z, Goodflsh
|
||||
ld hl, $2f80
|
||||
ld (Slot+1), hl
|
||||
inc a
|
||||
inc a
|
||||
jr z, Goodflsh
|
||||
call Print
|
||||
dz 'Incorrect flash IC'
|
||||
ret
|
||||
Goodflsh ld a, scandbl_ctrl
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
in a, (c)
|
||||
and $3f
|
||||
ld (normal+1), a
|
||||
or $c0
|
||||
out (c), a
|
||||
call init
|
||||
ld bc, zxuno_port
|
||||
ld a, scandbl_ctrl
|
||||
out (c), a
|
||||
inc b
|
||||
normal ld a, 0
|
||||
out (c), a
|
||||
ret
|
||||
init xor a
|
||||
esxdos M_GETSETDRV ; A = unidad actual
|
||||
jr nc, SDCard
|
||||
call Print
|
||||
dz 'SD card not inserted'
|
||||
ret
|
||||
SDCard ld b, FA_READ ; B = modo de apertura
|
||||
ld hl, FileName ; HL = Puntero al nombre del fichero (ASCIIZ)
|
||||
esxdos F_OPEN
|
||||
ld (handle+1), a
|
||||
jr nc, FileFound
|
||||
call Print
|
||||
dz 'File not found'
|
||||
ret
|
||||
FileFound call Print
|
||||
db 13, 'Writing SPI flash', 13
|
||||
dz '[', 6, ' ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
|
||||
ld ixl, $15
|
||||
Slot ld de, $f7c0
|
||||
exx
|
||||
Bucle ld a, 'o'
|
||||
exx
|
||||
push de
|
||||
rst $10
|
||||
pop de
|
||||
exx
|
||||
punto ld hl, $8000+plugin*4000
|
||||
ld bc, $4000
|
||||
handle ld a, 0
|
||||
esxdos F_READ
|
||||
jr nc, ReadOK
|
||||
call Print
|
||||
dz 'Read Error'
|
||||
ret
|
||||
ReadOK ld a, $40
|
||||
ld hl, $8000+plugin*4000
|
||||
exx
|
||||
call wrflsh
|
||||
inc de
|
||||
exx
|
||||
dec ixl
|
||||
jr nz, Bucle
|
||||
ld bc, zxuno_port
|
||||
ld hl, (Slot+1)
|
||||
ld a, core_addr
|
||||
out (c), a
|
||||
inc a
|
||||
inc b
|
||||
out (c), h
|
||||
out (c), l
|
||||
out (c), 0
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
out (c), a
|
||||
include Print.inc
|
||||
include wrflsh.inc
|
||||
include rst28.inc
|
||||
FileName
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
; rtc.asm - return date for esxdos call on $2700
|
||||
;
|
||||
; Copyright (C) 2022 Antonio Villena/McLeod_ideafix
|
||||
;
|
||||
; This program is free software: you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation, version 3.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
;
|
||||
; Compatible compilers:
|
||||
; SjAsmPlus, <https://github.com/z00m128/sjasmplus>
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
; output RTC.SYS
|
||||
|
||||
define SCL0SDA0 00b
|
||||
define SCL0SDA1 01b
|
||||
define SCL1SDA0 10b
|
||||
define SCL1SDA1 11b
|
||||
define I2CADDR_R $a3
|
||||
define I2CADDR_W $a2
|
||||
|
||||
include zxuno.def
|
||||
include esxdos.def
|
||||
|
||||
org $2700
|
||||
|
||||
ld bc, ZXUNOADDR
|
||||
ld a, i2creg
|
||||
out (c), a ; selecciono el registro I2C.
|
||||
inc b
|
||||
|
||||
ReadDateTime ld hl, Params
|
||||
;ld e, 1
|
||||
;call SendW ;Envío en modo escritura el número de registro desde donde quiero empezar a leer
|
||||
|
||||
SendW ;Transmite E bytes apuntados por HL al bus I2C (escritura)
|
||||
ld a, SCL1SDA1 ;Bus en modo idle.
|
||||
out (c), a ;Envío condición de START al bus (SDA a 0 mientras mantengo SCL a 1)
|
||||
dec a ;ld a,SCL1SDA0
|
||||
out (c), a
|
||||
ld a, I2CADDR_W ;Envío la dirección I2C de escritura del RTC
|
||||
call SendByte
|
||||
|
||||
LoopSendMess ;ld a, (hl) ;y en un bucle, me pongo a enviar uno tras otro, los E bytes a los que apunta HL
|
||||
ld a, 2 ;y en un bucle, me pongo a enviar uno tras otro, los E bytes a los que apunta HL
|
||||
; inc hl
|
||||
call SendByte
|
||||
; dec e
|
||||
; jr nz, LoopSendMess
|
||||
call Send0 ;después de enviar el ultimo byte, envío la condición de STOP al bus (envío un 0, con lo que se queda SDA a 0 y SCL a 1, y a continuación pongo SDA a 1)
|
||||
inc d ;ld d, SCL1SDA1
|
||||
out (c), d
|
||||
; ret
|
||||
|
||||
ld e, 7
|
||||
|
||||
; call SendR ;Y a continuación espero recibir 7 bytes (segundos, minutos, horas, día del mes, día de la semana (que no uso), mes, y dos últimos dígitos del año
|
||||
|
||||
SendR ;Recibo E bytes que se guardarán a partir de donde indique HL
|
||||
ld a, SCL1SDA1 ;Bus en modo idle.
|
||||
out (c), a
|
||||
;Envío la condición de START al bus I2C
|
||||
dec a ;ld a,SCL1SDA0
|
||||
out (c), a
|
||||
|
||||
ld a, I2CADDR_R ;Envío la dirección I2C de lectura del RTC
|
||||
call SendByte
|
||||
|
||||
LoopSendR call nz, Send0 ;enviar un ACK es enviar un 0
|
||||
call RcvByte ;y en un bucle, me pongo a recibir un byte detrás de otro. Tras cada byte, menos el último, envío ACK
|
||||
ld (hl), a
|
||||
inc hl
|
||||
dec e
|
||||
jr nz, LoopSendR
|
||||
|
||||
SendNACKandP call Send1 ;aquí llego si acabo de recibir el último byte. Envío un NACK (un 1)
|
||||
call Send0 ;y a continuación envío la condición de STOP al bus I2C
|
||||
inc d ;ld d, SCL1SDA1
|
||||
out (c), d
|
||||
; ret
|
||||
|
||||
ld hl, Params
|
||||
ld b, %01111110 ;Segundos
|
||||
call BCDtobin
|
||||
rrca ;Segundos / 2
|
||||
ld e, a ;Guarda en E
|
||||
ld b, %01111111 ;Minutos
|
||||
call BCDtobin
|
||||
rrca
|
||||
rrca
|
||||
rrca
|
||||
ld d, a
|
||||
and %11100000
|
||||
or e
|
||||
ld e, a
|
||||
ld b, %00111111 ;Horas
|
||||
call BCDtobin
|
||||
rlca
|
||||
rlca
|
||||
rlca
|
||||
xor d
|
||||
and %11111000
|
||||
xor d
|
||||
ld d, a
|
||||
push de
|
||||
ld b, %00111111 ;Días
|
||||
call BCDtobin
|
||||
ld e, a
|
||||
inc hl
|
||||
ld b, %00011111 ;Siglo/Mes
|
||||
ld c, (hl)
|
||||
call BCDtobin
|
||||
rrca
|
||||
rrca
|
||||
rrca
|
||||
ld d, a
|
||||
and %11100000
|
||||
or e
|
||||
ld e, a
|
||||
dec b
|
||||
call BCDtobin
|
||||
bit 7, c
|
||||
jr z, Milnov
|
||||
add 100
|
||||
Milnov sub 80
|
||||
rr d
|
||||
adc a, a
|
||||
ld b, a
|
||||
ld c, e
|
||||
pop de
|
||||
ret
|
||||
|
||||
BCDtobin ld a, (hl)
|
||||
inc hl
|
||||
and b
|
||||
ld b, 0
|
||||
Repite inc b
|
||||
sub $10
|
||||
jr nc, Repite
|
||||
Suma10 add a, 10
|
||||
djnz Suma10
|
||||
add a, 6
|
||||
ret
|
||||
|
||||
Params ;db 02h ; VL_seconds register . Indico que quiero empezar a leer desde aquí (que es lo típico para leer toda la fecha y hora)
|
||||
db 0,40h,16h,24h,01h,10h,22h ;La hora a la que quieres poner el reloj. En lectura, estos datos se machacan con la hora leída del RTC
|
||||
; S M H D W Mo Y (en BCD) OJO cuidao porque el dígito de las decenas no usa todos los bits (excepto en el año)
|
||||
; así que hay que enmascararlo antes de hacer algo con él (yo lo hago justo antes de imprirmilo)
|
||||
|
||||
SendByte ;Enviar un byte por I2C. Byte en A. BC=puerto de datos del ZXUNO ya apuntando a I2CREG. Usa y modifica: A, D, flags
|
||||
scf
|
||||
TransBit adc a, a ;A otro bit
|
||||
jr z, Endbyte
|
||||
call c, Send1
|
||||
call nc, Send0
|
||||
and a
|
||||
jr TransBit
|
||||
Endbyte ; Wait for ACK
|
||||
Send1 ld d, SCL0SDA1
|
||||
out (c), d
|
||||
ld d, SCL1SDA1
|
||||
out (c), d ;Transmito un bit 1 para dejar SDA en modo de alta impedancia y que el receptor puedo ponerlo a 0
|
||||
ret ; S flag 0 = ACK received, S flag 1 = ACK not received
|
||||
|
||||
RcvByte ;byte a recibir en A. BC=puerto de datos del ZXUNO ya apuntando a I2CREG. Usa y modifica: A, D, flags
|
||||
ld a, 1
|
||||
RcvBit call Send1 ;envío un pulso de reloj con SDA a alta impedancia
|
||||
in d, (c) ;el RTC pone aquí el dato (1 o 0) y lo leo (está en bit 7 de D)
|
||||
sll d ;bit 7 a carry
|
||||
adc a, a ;carry a bit 0 de A, y desplazo a la izquierda
|
||||
jr nc, RcvBit
|
||||
ret
|
||||
|
||||
Send0 ld d, SCL0SDA0
|
||||
out (c), d
|
||||
ld d, SCL1SDA0
|
||||
out (c), d
|
||||
ret
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
; setdate.asm - set date and time using pcf8563
|
||||
; .setdate YYYYMMDDHHMMSS
|
||||
;
|
||||
; Copyright (C) 2022 Antonio Villena/McLeod_ideafix
|
||||
;
|
||||
; This program is free software: you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation, version 3.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
;
|
||||
; Compatible compilers:
|
||||
; SjAsmPlus, <https://github.com/z00m128/sjasmplus>
|
||||
|
||||
; output SETDATE
|
||||
|
||||
define SCL0SDA0 00b
|
||||
define SCL0SDA1 01b
|
||||
define SCL1SDA0 10b
|
||||
define SCL1SDA1 11b
|
||||
define I2CADDR_R $a3
|
||||
define I2CADDR_W $a2
|
||||
|
||||
include zxuno.def
|
||||
include esxdos.def
|
||||
|
||||
org $2000 ; comienzo de la ejecución de los comandos ESXDOS
|
||||
NoPrint ld (Command+1), hl
|
||||
ld a, h
|
||||
or l
|
||||
jp nz, Init
|
||||
call Print
|
||||
db 13, 'Usage:', 13
|
||||
db ' .SETDATE YYYYMMDDHHMMSS', 13
|
||||
db 'Example:', 13
|
||||
dz ' .SETDATE 20151021072800', 13
|
||||
ret
|
||||
|
||||
Params db 02h ; VL_seconds register . Indico que quiero empezar a leer desde aquí (que es lo típico para leer toda la fecha y hora)
|
||||
db 0,40h,16h,24h,01h,10h,22h,0 ;La hora a la que quieres poner el reloj. En lectura, estos datos se machacan con la hora leída del RTC
|
||||
; S M H D W Mo Y
|
||||
|
||||
Wrong call Print
|
||||
dz 'Wrong format entered', 13
|
||||
ret
|
||||
Init ld b, 15
|
||||
Repite ld a, (hl)
|
||||
cp 13
|
||||
jr z, Fincad
|
||||
inc hl
|
||||
dec b
|
||||
sub $30
|
||||
cp 10
|
||||
jr c, Repite
|
||||
Fincad djnz Wrong
|
||||
Command ld hl, 0
|
||||
ld de, Params+8
|
||||
call ReadBCD
|
||||
cp $20
|
||||
jr nz, Centone
|
||||
ld b, $80
|
||||
Centone inc de
|
||||
call ReadBCD
|
||||
call ReadBCD
|
||||
xor b
|
||||
call ReadBCD
|
||||
dec de
|
||||
call ReadBCD
|
||||
call ReadBCD
|
||||
call ReadBCD
|
||||
ld (de), a
|
||||
ld hl, Params
|
||||
ld e, 8
|
||||
ld bc, ZXUNOADDR
|
||||
ld a, i2creg
|
||||
out (c), a ; selecciono el registro I2C.
|
||||
inc b
|
||||
ld a, SCL1SDA1 ;Bus en modo idle.
|
||||
out (c), a ;Envío condición de START al bus (SDA a 0 mientras mantengo SCL a 1)
|
||||
dec a ;ld a,SCL1SDA0
|
||||
out (c), a
|
||||
ld a, I2CADDR_W ;Envío la dirección I2C de escritura del RTC
|
||||
call SendByte
|
||||
LoopSendMess ld a, (hl) ;y en un bucle, me pongo a enviar uno tras otro, los E bytes a los que apunta HL
|
||||
inc hl
|
||||
call SendByte
|
||||
dec e
|
||||
jr nz, LoopSendMess
|
||||
call Send0 ;después de enviar el ultimo byte, envío la condición de STOP al bus (envío un 0, con lo que se queda SDA a 0 y SCL a 1, y a continuación pongo SDA a 1)
|
||||
inc d ;ld d, SCL1SDA1
|
||||
out (c), d
|
||||
or a
|
||||
ret
|
||||
|
||||
SendByte ;Enviar un byte por I2C. Byte en A. BC=puerto de datos del ZXUNO ya apuntando a I2CREG. Usa y modifica: A, D, flags
|
||||
scf
|
||||
TransBit adc a, a ;A otro bit
|
||||
jr z, Endbyte
|
||||
call c, Send1
|
||||
call nc, Send0
|
||||
and a
|
||||
jr TransBit
|
||||
Endbyte ; Wait for ACK
|
||||
Send1 ld d, SCL0SDA1
|
||||
out (c), d
|
||||
ld d, SCL1SDA1
|
||||
out (c), d ;Transmito un bit 1 para dejar SDA en modo de alta impedancia y que el receptor puedo ponerlo a 0
|
||||
ret ; S flag 0 = ACK received, S flag 1 = ACK not received
|
||||
|
||||
Send0 ld d, SCL0SDA0
|
||||
out (c), d
|
||||
ld d, SCL1SDA0
|
||||
out (c), d
|
||||
ret
|
||||
|
||||
ReadBCD ld (de), a
|
||||
dec de
|
||||
ld a, (hl)
|
||||
inc hl
|
||||
sub $30
|
||||
rlca
|
||||
rlca
|
||||
rlca
|
||||
rlca
|
||||
ld c, a
|
||||
ld a, (hl)
|
||||
inc hl
|
||||
sub $30
|
||||
or c
|
||||
ret
|
||||
|
||||
include Print.inc
|
||||
|
|
@ -0,0 +1,947 @@
|
|||
; mc.asm - multicore load any .ZX1 core on slot 9 or 45.
|
||||
; File must exists in current directory. It must be run while using a "root" mode ROM.
|
||||
;
|
||||
; Copyright (C) 2022 Antonio Villena
|
||||
;
|
||||
; This program is free software: you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation, version 3.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
;
|
||||
; Compatible compilers:
|
||||
; SjAsmPlus, <https://github.com/z00m128/sjasmplus>
|
||||
|
||||
; output ZX1
|
||||
|
||||
define romtbl $d000
|
||||
define indexe $e000
|
||||
define active $e040
|
||||
|
||||
define bitstr active+1
|
||||
define quietb bitstr+1
|
||||
define checkc quietb+1
|
||||
define keyiss checkc+1
|
||||
define timing keyiss+1
|
||||
define conten timing+1
|
||||
define divmap conten+1
|
||||
define nmidiv divmap+1
|
||||
define grapmo nmidiv+1
|
||||
define layout grapmo+1
|
||||
define joykey layout+1
|
||||
define joydb9 joykey+1
|
||||
define split joydb9+1
|
||||
define outvid split+1
|
||||
define scanli outvid+1
|
||||
define freque scanli+1
|
||||
define cpuspd freque+1
|
||||
define copt cpuspd+1
|
||||
define cburst copt+1
|
||||
|
||||
define cmbpnt $e100
|
||||
define cmbcor $e1d0 ;lo: Y coord hi: X coord
|
||||
define items $e1d2 ;lo: totales hi: en pantalla
|
||||
define offsel $e1d4 ;lo: offset visible hi: seleccionado
|
||||
define empstr $e1d6
|
||||
define tmpbuf $e200
|
||||
|
||||
include zxuno.def
|
||||
include esxdos.def
|
||||
|
||||
org $8000
|
||||
jr NoPrint
|
||||
db 'BP', 0, 0, 0, 0, 'ZX1 plugin - antoniovillena', 0
|
||||
NoPrint ld (FileName+1), hl
|
||||
ld bc, zxuno_port
|
||||
out (c), 0
|
||||
inc b
|
||||
in f, (c)
|
||||
jp p, Nonlock
|
||||
call Print
|
||||
dz 'ROM not rooted'
|
||||
ret
|
||||
Nonlock wreg flash_cs, 0 ; activamos spi, enviando un 0
|
||||
wreg flash_spi, $9f ; jedec id
|
||||
in a, (c)
|
||||
in a, (c)
|
||||
in a, (c)
|
||||
in a, (c)
|
||||
wreg flash_cs, 1 ; desactivamos spi, enviando un 1
|
||||
sub $18
|
||||
jr z, Goodflsh
|
||||
ld hl, $2f80
|
||||
ld (Slot+1), hl
|
||||
inc a
|
||||
inc a
|
||||
jr z, Goodflsh
|
||||
call Print
|
||||
dz 'Incorrect flash IC'
|
||||
ret
|
||||
Goodflsh ld a, scandbl_ctrl
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
in a, (c)
|
||||
and $3f
|
||||
ld (Normal+1), a
|
||||
or $c0
|
||||
out (c), a
|
||||
call Init
|
||||
ld bc, zxuno_port
|
||||
ld a, scandbl_ctrl
|
||||
out (c), a
|
||||
inc b
|
||||
Normal ld a, 0
|
||||
out (c), a
|
||||
ld a, 7 ;PLUGIN_OK|PLUGIN_RESTORE_SCREEN|PLUGIN_RESTORE_BUFFERS
|
||||
ret
|
||||
Init wreg flash_cs, 1
|
||||
ld de, indexe
|
||||
ld hl, $0070
|
||||
ld a, 1
|
||||
call rdflsh
|
||||
xor a
|
||||
esxdos M_GETSETDRV ; A = unidad actual
|
||||
jr nc, SDCard
|
||||
call Print
|
||||
dz 'SD card not inserted'
|
||||
ret
|
||||
SDCard ld (Drive+1), a
|
||||
ld b, FA_READ ; B = modo de apertura
|
||||
FileName ld hl, 0
|
||||
esxdos F_OPEN
|
||||
ld (Handle+1), a
|
||||
jr nc, FileFound
|
||||
call Print
|
||||
dz 'File not found'
|
||||
ret
|
||||
FileFound ld hl, Stat
|
||||
esxdos F_FSTAT
|
||||
ld hl, (Stat+7)
|
||||
ld bc, $1041
|
||||
sbc hl, bc
|
||||
jp z, Roms
|
||||
call Print
|
||||
db 13, 'Writing SPI flash', 13
|
||||
dz '[', 6, ' ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
|
||||
ld ixl, $15
|
||||
Slot ld de, $f7c0
|
||||
exx
|
||||
Bucle ld a, 'o'
|
||||
exx
|
||||
push de
|
||||
rst $10
|
||||
pop de
|
||||
exx
|
||||
ld hl, $c000
|
||||
ld bc, $4000
|
||||
Handle ld a, 0
|
||||
esxdos F_READ
|
||||
jr nc, ReadOK
|
||||
call Print
|
||||
dz 'Read Error'
|
||||
ret
|
||||
ReadOK ld a, $40
|
||||
ld hl, $c000
|
||||
exx
|
||||
call wrflsh
|
||||
inc de
|
||||
exx
|
||||
dec ixl
|
||||
jr nz, Bucle
|
||||
ld bc, zxuno_port
|
||||
ld hl, (Slot+1)
|
||||
ld a, core_addr
|
||||
out (c), a
|
||||
inc a
|
||||
inc b
|
||||
out (c), h
|
||||
out (c), l
|
||||
out (c), 0
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
out (c), a
|
||||
include Print.inc
|
||||
include rdflsh.inc
|
||||
include wrflsh.inc
|
||||
include rst28.inc
|
||||
|
||||
Roms ld a, (Handle+1)
|
||||
ld hl, romtbl
|
||||
esxdos F_READ
|
||||
ld hl, chrBegin
|
||||
ld de, $c400-Stat+chrBegin
|
||||
ld bc, Stat-chrBegin
|
||||
ldir
|
||||
ld hl, $c000
|
||||
Roms1 ld b, $04
|
||||
Roms2 ld a, (hl)
|
||||
rrca
|
||||
rrca
|
||||
ld (de), a
|
||||
inc de
|
||||
cpi
|
||||
jp pe, Roms2
|
||||
jr nc, Roms1
|
||||
push ix
|
||||
|
||||
;++++++++++++++++++++++++++++++++++
|
||||
;++++++++ Boot list ++++++++
|
||||
;++++++++++++++++++++++++++++++++++
|
||||
blst ld hl, indexe
|
||||
numen1 ld a, (hl) ; calculo en L el número de entradas
|
||||
inc l
|
||||
inc a
|
||||
jr nz, numen1
|
||||
ld a, l
|
||||
cp 13
|
||||
jr c, blst1
|
||||
ld a, 13
|
||||
blst1 ld h, a
|
||||
ld (items), hl
|
||||
add a, -25
|
||||
cpl
|
||||
rra
|
||||
ld l, a
|
||||
ld a, h
|
||||
add a, 2
|
||||
ld e, a
|
||||
ld a, %01001111 ; fondo azul tinta blanca
|
||||
ld h, $01 ; coordenada X
|
||||
ld d, $1c ; anchura de ventana
|
||||
push hl
|
||||
call window
|
||||
ld ix, cad1
|
||||
pop bc
|
||||
inc b
|
||||
call prnstr
|
||||
push bc
|
||||
ld iy, (items)
|
||||
blst2 ld ix, cad2
|
||||
call prnstr ; | |
|
||||
dec iyh
|
||||
jr nz, blst2
|
||||
ld ix, cad3
|
||||
call prnstr
|
||||
ld iy, indexe
|
||||
ld ix, cmbpnt
|
||||
ld de, tmpbuf
|
||||
ld b, e
|
||||
blst3 ld l, (iy)
|
||||
inc l
|
||||
call calcu
|
||||
addbls ld (ix+0), e
|
||||
ld (ix+1), d
|
||||
push hl
|
||||
ld c, $21
|
||||
push hl
|
||||
str2t1 dec hl
|
||||
dec c
|
||||
ld a, (hl)
|
||||
cp $20
|
||||
jr z, str2t1
|
||||
pop hl
|
||||
ld a, l
|
||||
sub $20
|
||||
ld l, a
|
||||
jr nc, str2t2
|
||||
dec h
|
||||
str2t2 ldir
|
||||
xor a
|
||||
ld (de), a
|
||||
inc de
|
||||
pop hl
|
||||
addbl1 inc iyl
|
||||
inc ixl
|
||||
inc ixl
|
||||
ld a, (items)
|
||||
sub 2
|
||||
sub iyl
|
||||
jr nc, blst3
|
||||
bls37 ld (ix+1), a
|
||||
ld a, (items+1)
|
||||
ld e, a
|
||||
ld d, 32
|
||||
ld a, (active)
|
||||
bls38 pop hl
|
||||
ld h, 4
|
||||
blst4 ei
|
||||
|
||||
combol push hl
|
||||
push de
|
||||
ex af, af'
|
||||
ld (cmbcor), hl
|
||||
ld hl, cmbpnt+1
|
||||
combo1 ld a, (hl)
|
||||
inc l
|
||||
inc l
|
||||
inc a
|
||||
jr nz, combo1
|
||||
srl l
|
||||
dec l
|
||||
ld c, l
|
||||
ld h, e
|
||||
ld b, d
|
||||
ld (items), hl
|
||||
ld hl, empstr
|
||||
combo2 ld (hl), $20
|
||||
inc l
|
||||
djnz combo2
|
||||
ld (hl), a
|
||||
ex af, af'
|
||||
ld (offsel+1), a
|
||||
sub e
|
||||
jr nc, combo3
|
||||
sbc a, a
|
||||
combo3 inc a
|
||||
combo4 ld (offsel), a
|
||||
ld iy, (items)
|
||||
ld iyl, iyh
|
||||
ld bc, (cmbcor)
|
||||
ld a, iyl
|
||||
or a
|
||||
jr z, combo7
|
||||
combo5 ld ix, empstr
|
||||
call prnstr
|
||||
dec iyl
|
||||
jr nz, combo5
|
||||
ld a, (offsel)
|
||||
ld bc, (cmbcor)
|
||||
add a, a
|
||||
ld h, cmbpnt>>8
|
||||
ld l, a
|
||||
combo6 ld a, (hl)
|
||||
ld ixl, a
|
||||
inc l
|
||||
ld a, (hl)
|
||||
inc l
|
||||
ld ixh, a
|
||||
push hl
|
||||
call prnstr
|
||||
pop hl
|
||||
dec iyh
|
||||
jr nz, combo6
|
||||
combo7 ld de, $1a02
|
||||
ld hl, (cmbcor)
|
||||
ld h, e
|
||||
ld a, (items+1)
|
||||
ld e, a
|
||||
ld a, %01001111
|
||||
call window
|
||||
ld de, $1a02
|
||||
ld hl, (offsel)
|
||||
ld a, (cmbcor)
|
||||
add a, h
|
||||
sub l
|
||||
ld l, a
|
||||
ld h, e
|
||||
ld e, 1
|
||||
ld a, %01000111
|
||||
call window
|
||||
waitky in a, ($fe)
|
||||
or %11100000
|
||||
inc a
|
||||
jr z, waitky
|
||||
ld bc, (items)
|
||||
ld hl, (offsel)
|
||||
ld a, $ef ;67
|
||||
in a, ($fe)
|
||||
bit 3, a
|
||||
jr nz, combo9
|
||||
call halt8
|
||||
dec h
|
||||
jp m, combo7
|
||||
ld a, h
|
||||
cp l
|
||||
ld (offsel), hl
|
||||
jr nc, combo7
|
||||
ld a, l
|
||||
dec a
|
||||
combo8 jp combo4
|
||||
combo9 bit 4, a
|
||||
jr nz, comboa
|
||||
call halt8
|
||||
inc h
|
||||
ld a, h
|
||||
cp c
|
||||
jr z, combo7
|
||||
sub l
|
||||
cp b
|
||||
ld (offsel), hl
|
||||
jr nz, combo7
|
||||
ld a, l
|
||||
inc a
|
||||
jr combo8
|
||||
comboa ld a, $bf ;enter
|
||||
in a, ($fe)
|
||||
rrca
|
||||
jr nc, execut
|
||||
salir pop de
|
||||
pop hl
|
||||
pop ix
|
||||
halt8 halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
halt
|
||||
ret
|
||||
|
||||
execut ld l, h
|
||||
|
||||
ccon0 ld h, active>>8
|
||||
ld l, (hl)
|
||||
call calcu
|
||||
ld de, Stat
|
||||
ld a, (hl)
|
||||
push de
|
||||
pop ix
|
||||
ld bc, 5
|
||||
ldir
|
||||
ld l, a
|
||||
ld a, (ix+1)
|
||||
ld iyh, a
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld d, l
|
||||
ld e, 0
|
||||
ld c, h
|
||||
ld b, e
|
||||
ld a, (Handle+1)
|
||||
ld l, SEEK_CUR
|
||||
esxdos F_SEEK
|
||||
ld iyl, 28
|
||||
|
||||
call Bootoogle
|
||||
cont66 ld bc, zxuno_port
|
||||
ld a, master_mapper
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
inc iyl
|
||||
out (c), a
|
||||
call Bootoogle
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_READ
|
||||
call Bootoogle
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld de, $c000
|
||||
ldir
|
||||
|
||||
call Bootoogle
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_READ
|
||||
call Bootoogle
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld de, $e000
|
||||
ldir
|
||||
dec iyh
|
||||
jr nz, cont66
|
||||
|
||||
call Bootoogle
|
||||
ld a, (Handle+1)
|
||||
esxdos F_CLOSE
|
||||
|
||||
Drive ld a, 0
|
||||
ld b, FA_WRITE | FA_OPEN_AL ; B = modo de apertura
|
||||
ld hl, Groms
|
||||
esxdos F_OPEN
|
||||
ld (Handle+1), a
|
||||
jr nc, FileFo
|
||||
call Print
|
||||
dz 'Cannot open GROMS.ZX1'
|
||||
ret
|
||||
FileFo
|
||||
|
||||
ld iyl, 28
|
||||
cont67 call Bootoogle
|
||||
ld bc, zxuno_port
|
||||
ld a, master_mapper
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
inc iyl
|
||||
out (c), a
|
||||
ld hl, $c000
|
||||
ld bc, $2000
|
||||
ld de, $a000
|
||||
ldir
|
||||
call Bootoogle
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_WRITE
|
||||
|
||||
call Bootoogle
|
||||
ld hl, $e000
|
||||
ld bc, $2000
|
||||
ld de, $a000
|
||||
ldir
|
||||
call Bootoogle
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_WRITE
|
||||
dec (ix+1)
|
||||
jr nz, cont67
|
||||
|
||||
ld a, (Handle+1)
|
||||
esxdos F_CLOSE
|
||||
|
||||
|
||||
ld a, 2
|
||||
out ($fe), a
|
||||
oooo jr oooo
|
||||
|
||||
|
||||
|
||||
ld d, (ix+2)
|
||||
ld hl, timing
|
||||
ld a, (outvid)
|
||||
rrca
|
||||
ld a, 3
|
||||
ld b, a
|
||||
jr c, ccon1
|
||||
cp (hl) ; timing
|
||||
ld b, (hl)
|
||||
jr nz, ccon1
|
||||
ld b, d
|
||||
ccon1 and b ; 0 0 0 0 0 0 MODE1 MODE0
|
||||
rrca ; MODE0 0 0 0 0 0 0 MODE1
|
||||
inc l
|
||||
srl (hl) ; conten
|
||||
jr z, ccon2
|
||||
bit 4, d
|
||||
jr z, ccon2
|
||||
ccf
|
||||
ccon2 adc a, a ; 0 0 0 0 0 0 MODE1 /DISCONT
|
||||
ld l, keyiss & $ff
|
||||
rr b
|
||||
adc a, a ; 0 0 0 0 0 MODE1 /DISCONT MODE0
|
||||
srl (hl) ; keyiss
|
||||
jr z, ccon3
|
||||
bit 5, d
|
||||
jr z, ccon3
|
||||
ccf
|
||||
ccon3 adc a, a ; 0 0 0 0 MODE1 /DISCONT MODE0 /I2KB
|
||||
ld l, nmidiv & $ff
|
||||
srl (hl) ; nmidiv
|
||||
jr z, conti1
|
||||
bit 2, d
|
||||
jr z, conti1
|
||||
ccf
|
||||
conti1 adc a, a ; 0 0 0 MODE1 /DISCONT MODE0 /I2KB /DISNMI
|
||||
dec l
|
||||
srl (hl) ; divmap
|
||||
jr z, conti2
|
||||
bit 3, d
|
||||
jr z, conti2
|
||||
ccf
|
||||
conti2 adc a, a ; 0 0 MODE1 /DISCONT MODE0 /I2KB /DISNMI DIVEN
|
||||
add a, a ; 0 MODE1 /DISCONT MODE0 /I2KB /DISNMI DIVEN 0
|
||||
xor d
|
||||
and %01111111
|
||||
xor d
|
||||
xor %10101100 ; LOCK MODE1 DISCONT MODE0 I2KB DISNMI DIVEN 0
|
||||
ld (conti9+1), a
|
||||
|
||||
micont ld iyl, 28
|
||||
ld a, (ix+1)
|
||||
ld iyh, a
|
||||
|
||||
IF 0
|
||||
conti5 wreg master_conf, 1
|
||||
ld a, master_mapper
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
inc iyl
|
||||
out (c), a
|
||||
wreg master_conf, 2
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_READ
|
||||
wreg master_conf, 1
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld de, $c000
|
||||
ldir
|
||||
wreg master_conf, 2
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_READ
|
||||
wreg master_conf, 1
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld de, $d000
|
||||
ldir
|
||||
wreg master_conf, 2
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_READ
|
||||
wreg master_conf, 1
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld de, $e000
|
||||
ldir
|
||||
wreg master_conf, 2
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld a, (Handle+1)
|
||||
esxdos F_READ
|
||||
wreg master_conf, 1
|
||||
ld hl, $6000
|
||||
ld bc, $1000
|
||||
ld de, $f000
|
||||
ldir
|
||||
dec iyh
|
||||
jp nz, conti5
|
||||
ENDIF
|
||||
|
||||
; wreg master_conf, 2
|
||||
|
||||
cont55 wreg master_conf, 1
|
||||
ld a, master_mapper
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
inc iyl
|
||||
out (c), a
|
||||
ld hl, $c000
|
||||
ld bc, $2000
|
||||
ld de, $a000
|
||||
ldir
|
||||
wreg master_conf, 2
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
handle2 ld a, 0
|
||||
esxdos F_WRITE
|
||||
wreg master_conf, 1
|
||||
ld hl, $e000
|
||||
ld bc, $2000
|
||||
ld de, $a000
|
||||
ldir
|
||||
wreg master_conf, 2
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld a, (handle2+1)
|
||||
esxdos F_WRITE
|
||||
dec (ix+1)
|
||||
jr nz, cont55
|
||||
|
||||
ld a, (handle2+1)
|
||||
esxdos F_CLOSE
|
||||
|
||||
ld a, 1
|
||||
out ($fe), a
|
||||
di
|
||||
halt
|
||||
|
||||
; jp conti9
|
||||
|
||||
; ei
|
||||
|
||||
wreg master_conf, 1
|
||||
ld iyl, 28
|
||||
conti6 ld a, master_mapper
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
out (c), a
|
||||
ld hl, $c000
|
||||
ld bc, $2000
|
||||
ld de, $a000
|
||||
ldir
|
||||
ld a, master_mapper
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
sub 20
|
||||
out (c), a
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld de, $c000
|
||||
ldir
|
||||
ld a, master_mapper
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
out (c), a
|
||||
ld hl, $e000
|
||||
ld bc, $2000
|
||||
ld de, $a000
|
||||
ldir
|
||||
ld a, master_mapper
|
||||
dec b
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, iyl
|
||||
sub 20
|
||||
out (c), a
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld de, $e000
|
||||
ldir
|
||||
inc iyl
|
||||
dec iyh
|
||||
jr nz, conti6
|
||||
|
||||
; ld a, 1
|
||||
; out ($fe), a
|
||||
; halt
|
||||
|
||||
conti9 ld a, 0
|
||||
dec b
|
||||
out (c), 0
|
||||
inc b
|
||||
out (c), a
|
||||
dec b
|
||||
ld a, dev_control
|
||||
out (c), a
|
||||
inc b
|
||||
ld a, (ix+3)
|
||||
out (c), a
|
||||
dec b
|
||||
ld a, dev_control2
|
||||
out (c), a
|
||||
inc b
|
||||
in a, (c)
|
||||
and %11111000
|
||||
ld l, a
|
||||
ld a, (grapmo)
|
||||
srl a
|
||||
jr c, contib
|
||||
ld a, 7 ; Resv Resv Resv Resv Resv DIRADAS DITIMEX DIULAPLUS
|
||||
jr z, contib
|
||||
ld a, (ix+4)
|
||||
contib or l
|
||||
out (c), a
|
||||
rst 0
|
||||
|
||||
; -------------------------------------
|
||||
; Draw a window in the attribute area
|
||||
; Parameters:
|
||||
; A: attribute color
|
||||
; HL: X coordinate (H) and Y coordinate (L)
|
||||
; DE: window width (D) and window height (E)
|
||||
; -------------------------------------
|
||||
window push hl
|
||||
push de
|
||||
ld c, h
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld h, $16
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
windo1 ld b, d
|
||||
windo2 ld (hl), a
|
||||
inc hl
|
||||
djnz windo2
|
||||
ld c, d
|
||||
sbc hl, bc
|
||||
ld c, $20
|
||||
add hl, bc
|
||||
dec e
|
||||
jr nz, windo1
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; -------------------------------------
|
||||
; Calculate ROM entry address
|
||||
; Parameters:
|
||||
; L: input slot
|
||||
; Returns:
|
||||
; HL: destination address
|
||||
; -------------------------------------
|
||||
calcu add hl, hl
|
||||
add hl, hl
|
||||
ld h, romtbl >> 12
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
ret
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Print string routine
|
||||
; Parameters:
|
||||
; BC: X coord (B) and Y coord (C)
|
||||
; IX: null terminated string
|
||||
; -----------------------------------------------------------------------------
|
||||
prnstr push bc
|
||||
call prnstr1
|
||||
pop bc
|
||||
inc c
|
||||
ret
|
||||
prnstr1 ld a, b
|
||||
and %11111100
|
||||
ld d, a
|
||||
xor b
|
||||
ld b, a
|
||||
ld e, a
|
||||
jr z, prnch1
|
||||
dec e
|
||||
prnch1 ld a, d
|
||||
rrca
|
||||
ld d, a
|
||||
rrca
|
||||
add a, d
|
||||
add a, e
|
||||
ld e, a
|
||||
ld a, c
|
||||
and %00011000
|
||||
or %01000000
|
||||
ld d, a
|
||||
ld a, c
|
||||
and %00000111
|
||||
rrca
|
||||
rrca
|
||||
rrca
|
||||
add a, e
|
||||
ld e, a
|
||||
rr b
|
||||
jr c, pos26
|
||||
jr nz, pos4
|
||||
pos0 ld a, (ix)
|
||||
inc ix
|
||||
add a, a
|
||||
ret z
|
||||
ld h, $c0 >> 2
|
||||
ld b, 8
|
||||
ld l, a
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
pos01 ld a, (hl)
|
||||
ld (de), a
|
||||
inc d
|
||||
inc l
|
||||
djnz pos01
|
||||
ld hl, $f800
|
||||
add hl, de
|
||||
ex de, hl
|
||||
pos2 ld a, (ix)
|
||||
inc ix
|
||||
add a, a
|
||||
ret z
|
||||
ld h, $cc >> 2
|
||||
ld bc, $04fc
|
||||
call doble
|
||||
pos4 ld a, (ix)
|
||||
inc ix
|
||||
add a, a
|
||||
ret z
|
||||
ld h, $c8 >> 2
|
||||
ld bc, $04f0
|
||||
call doble
|
||||
pos6 ld a, (ix)
|
||||
inc ix
|
||||
add a, a
|
||||
ret z
|
||||
ld h, $c4 >> 2
|
||||
ld b, 8
|
||||
ld l, a
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
pos61 ld a, (de)
|
||||
xor (hl)
|
||||
ld (de), a
|
||||
inc d
|
||||
inc l
|
||||
djnz pos61
|
||||
ld hl, $f801
|
||||
add hl, de
|
||||
ex de, hl
|
||||
jr pos0
|
||||
pos26 rr b
|
||||
jr c, pos6
|
||||
jr pos2
|
||||
|
||||
doble ld l, a
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
doble2 ld a, (de)
|
||||
xor (hl)
|
||||
and c
|
||||
xor (hl)
|
||||
ld (de), a
|
||||
inc e
|
||||
ld a, (hl)
|
||||
and c
|
||||
ld (de), a
|
||||
inc d
|
||||
inc l
|
||||
ld a, (hl)
|
||||
and c
|
||||
ld (de), a
|
||||
dec e
|
||||
ld a, (de)
|
||||
xor (hl)
|
||||
and c
|
||||
xor (hl)
|
||||
ld (de), a
|
||||
inc d
|
||||
inc l
|
||||
djnz doble2
|
||||
ld hl, $f801
|
||||
add hl, de
|
||||
ex de, hl
|
||||
ret
|
||||
|
||||
Bootoogle ld bc, zxuno_port
|
||||
out (c), 0
|
||||
inc b
|
||||
in a, (c)
|
||||
xor %00000001
|
||||
out (c), a
|
||||
ret
|
||||
|
||||
Groms dz "GROMS.ZX1"
|
||||
|
||||
cad1 defb $12, $11, $11, $11, $11, $11, $11, $11, $11
|
||||
defb $11, $11, $11, $11, $11, $11, $11, $11, $11
|
||||
defb $11, $11, $11, $11, $11, $11, $11, $11, $11
|
||||
defb $11, $11, $11, $11, $11, $11, $11, $11, $13, 0
|
||||
cad2 defb $10, ' ', $10, 0
|
||||
cad3 defb $14, $11, $11, $11, $11, $11, $11, $11, $11
|
||||
defb $11, $11, $11, $11, $11, $11, $11, $11, $11
|
||||
defb $11, $11, $11, $11, $11, $11, $11, $11, $11
|
||||
defb $11, $11, $11, $11, $11, $11, $11, $11, $15, 0
|
||||
|
||||
chrBegin incbin fuente6x8.bin
|
||||
|
||||
Stat
|
||||
Loading…
Reference in New Issue