mirror of https://github.com/zxdos/zxuno.git
926 lines
23 KiB
NASM
926 lines
23 KiB
NASM
output launcher.rom
|
|
include version.asm
|
|
define vertical 1
|
|
macro wreg dir, dato
|
|
rst $28
|
|
defb dir, dato
|
|
endm
|
|
define call_prnstr rst $18
|
|
define zxuno_port $fc3b
|
|
define master_conf 0
|
|
define master_mapper 1
|
|
define flash_spi 2
|
|
define flash_cs 3
|
|
define scan_code 4
|
|
define key_stat 5
|
|
define joy_conf 6
|
|
define key_map 7
|
|
define nmi_event 8
|
|
define mouse_data 9
|
|
define mouse_status 10
|
|
define scandbl_ctrl 11
|
|
define raster_line 12
|
|
define raster_ctrl 13
|
|
define dev_control 14
|
|
define dev_control2 15
|
|
define core_addr $fc
|
|
define core_boot $fd
|
|
define cold_boot $fe
|
|
define core_id $ff
|
|
|
|
define SPI_PORT $eb
|
|
define OUT_PORT $e7
|
|
define MMC_0 $fe ; D0 LOW = SLOT0 active
|
|
define CMD0 $40
|
|
define CMD1 $41
|
|
define CMD8 $48
|
|
define SET_BLOCKLEN $50
|
|
define READ_SINGLE $51
|
|
define CMD41 $69
|
|
define CMD55 $77
|
|
define CMD58 $7a
|
|
|
|
define cmbpnt $8f00
|
|
define colcmb $8fc6 ;lo: color de lista hi: temporal
|
|
define menuop $8fc8 ;lo: menu superior hi: submenu
|
|
define corwid $8fca ;lo: X attr coor hi: attr width
|
|
define cmbcor $8fcc ;lo: Y coord hi: X coord
|
|
define codcnt $8fce ;lo: codigo ascii hi: repdel
|
|
define items $8fd0 ;lo: totales hi: en pantalla
|
|
define offsel $8fd2 ;lo: offset visible hi: seleccionado
|
|
; inputs lo: cursor position hi: max length
|
|
; otro lo: pagina actual hi: mascara paginas
|
|
define sdhc $8fd4
|
|
define scnbak $8fd5
|
|
define empstr $8fd6
|
|
define config $9000
|
|
define indexe $a000
|
|
define active $a040
|
|
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 outvid joydb9+1
|
|
define scanli outvid+1
|
|
define freque scanli+1
|
|
define cpuspd freque+1
|
|
define roboot cpuspd+1 ; boot as root
|
|
|
|
define tmpbuf $7800
|
|
define tmpbu2 $7880
|
|
define bnames $a100
|
|
define stack $aab0
|
|
|
|
di
|
|
jp start
|
|
|
|
block $18-$
|
|
rst18 jp prnstr
|
|
|
|
block $28-$
|
|
rst28 ld bc, zxuno_port + $100
|
|
pop hl
|
|
outi
|
|
ld b, (zxuno_port >> 8)+2
|
|
outi
|
|
jp (hl)
|
|
|
|
; ----------------------
|
|
; THE 'KEYBOARD' ROUTINE
|
|
; ----------------------
|
|
block $38-$
|
|
rst38 push af
|
|
ex af, af'
|
|
push af
|
|
push bc
|
|
push de
|
|
push hl
|
|
ld de, keytab-1&$ff
|
|
ld bc, $fefe
|
|
ld l, d
|
|
keyscn in a, (c)
|
|
cpl
|
|
and $1f
|
|
ld h, l
|
|
jr z, keysc5
|
|
keysc1 inc l
|
|
srl a
|
|
jr nc, keysc1
|
|
ex af, af'
|
|
ld a, l
|
|
cp $25 ;symbol, change here
|
|
jr z, keysc3
|
|
cp $01 ;shift, change here
|
|
jr z, keysc2
|
|
inc d
|
|
dec d
|
|
ld d, l
|
|
jr z, keysc4
|
|
xor a
|
|
jr keysc6
|
|
keysc2 ld e, 39+keytab&$ff
|
|
defb $c2 ;JP NZ,xxxx
|
|
keysc3 ld e, 79+keytab&$ff
|
|
keysc4 ex af, af'
|
|
jr nz, keysc1
|
|
keysc5 ld a, h
|
|
add a, 5
|
|
ld l, a
|
|
rlc b
|
|
jr c, keyscn
|
|
in a, ($1f)
|
|
or a
|
|
jr z, nokemp
|
|
ld hl, kemp-1
|
|
sikemp inc hl
|
|
rrca
|
|
jr nc, sikemp
|
|
jr sikem2
|
|
nokemp ld h, a
|
|
add a, d
|
|
jr z, keysc6
|
|
ld d, h
|
|
ld l, a
|
|
add hl, de
|
|
sikem2 ld a, (hl)
|
|
keysc6 ld hl, (codcnt)
|
|
jr z, keysc8
|
|
res 7, l
|
|
cp l
|
|
jr nz, keysc7
|
|
dec h
|
|
jr nz, keysc9
|
|
ld h, 3
|
|
defb $c2
|
|
keysc7 ld h, 32
|
|
or $80
|
|
keysc8 ld l, a
|
|
keysc9 ld (codcnt), hl
|
|
ei
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
pop af
|
|
ex af, af'
|
|
pop af
|
|
ret ; return.
|
|
; ---------------
|
|
; THE 'KEY TABLE'
|
|
; ---------------
|
|
keytab defb $00, $7a, $78, $63, $76 ; Caps z x c v
|
|
defb $61, $73, $64, $66, $67 ; a s d f g
|
|
defb $71, $77, $65, $72, $74 ; q w e r t
|
|
defb $31, $32, $33, $34, $35 ; 1 2 3 4 5
|
|
defb $30, $39, $38, $37, $36 ; 0 9 8 7 6
|
|
defb $70, $6f, $69, $75, $79 ; p o i u y
|
|
defb $0d, $6c, $6b, $6a, $68 ; Enter l k j h
|
|
defb $20, $00, $6d, $6e, $62 ; Space Symbol m n b
|
|
defb $00, $5a, $58, $43, $56 ; Caps Z X C V
|
|
defb $41, $53, $44, $46, $47 ; A S D F G
|
|
defb $51, $57, $45, $52, $54 ; Q W E R T
|
|
defb $17, $19, $1a, $1b, $1e ; Edit CapsLk TruVid InvVid Left
|
|
defb $18, $16, $1f, $1c, $1d ; Del Graph Right Up Down
|
|
defb $50, $4f, $49, $55, $59 ; P O I U Y
|
|
defb $0d, $4c, $4b, $4a, $48 ; Enter L K J H
|
|
defb $0c, $00, $4d, $4e, $42 ; Break Symbol M N B
|
|
defb $00, $3a, $60, $3f, $2f ; Caps : ` ? /
|
|
defb $7e, $7c, $5c, $7b, $7d ; ~ | \ { }
|
|
defb $51, $57, $45, $3c, $3e ; Q W E < >
|
|
defb $21, $40, $23, $24, $25 ; ! @ # $ %
|
|
defb $5f, $29, $28, $27, $26 ; _ ) ( ' &
|
|
defb $22, $3b, $7f, $5d, $5b ; " ; (c) ] [
|
|
defb $0d, $3d, $2b, $2d, $5e ; Enter = + - ^
|
|
defb $20, $00, $2e, $2c, $2a ; Space Symbol . , *
|
|
kemp defb $1f, $1e, $1d, $1c, $0d ; Right Left Down Up Enter
|
|
|
|
start ld sp, stack
|
|
ld hl, chrstr
|
|
ld de, $b080
|
|
ld bc, chrend-chrstr
|
|
ldir
|
|
call loadch
|
|
ld hl, $b000
|
|
ld de, $b400
|
|
start1 ld b, $04
|
|
start2 ld a, (hl)
|
|
rrca
|
|
rrca
|
|
ld (de), a
|
|
inc de
|
|
cpi
|
|
jp pe, start2
|
|
ld a, h
|
|
cp a, $bc
|
|
jr nz, start1
|
|
ei
|
|
|
|
;++++++++++++++++++++++++++++++++++
|
|
;++++++++ Boot list ++++++++
|
|
;++++++++++++++++++++++++++++++++++
|
|
blst ld hl, finbez-1
|
|
ld d, $7a
|
|
call dzx7b ; descomprimir
|
|
call drcs
|
|
ld hl, bnames-1
|
|
ld bc, $20
|
|
ld a, c
|
|
laun0 add hl, bc
|
|
inc e
|
|
cp (hl)
|
|
jr z, laun0
|
|
inc e
|
|
ld a, e
|
|
ld l, a
|
|
cp 24
|
|
jr c, laun1
|
|
ld a, 24
|
|
laun1 ld h, a
|
|
ld (items), hl
|
|
ld hl, $0104 ; coordenada X
|
|
push hl
|
|
ld iy, (items)
|
|
ld hl, cad62
|
|
ld (cmbpnt), hl
|
|
ld iy, indexe
|
|
ld ix, cmbpnt
|
|
ld de, tmpbuf
|
|
ld b, e
|
|
ld hl, bnames
|
|
call addbl1
|
|
laun2 ld c, $20
|
|
add hl, bc
|
|
call addbls
|
|
jr nc, laun2
|
|
ld (ix+1), a
|
|
ld a, (items+1)
|
|
ld e, a
|
|
ld d, 24
|
|
call chcol
|
|
defw $1203
|
|
defw %0111100001000111
|
|
bls375 ld hl, 0;(active)
|
|
ld a, h
|
|
pop hl
|
|
ld h, 4
|
|
blst4 call combol
|
|
ld b, a
|
|
ld a, (codcnt)
|
|
sub $0d
|
|
jr nz, blst4
|
|
call calbit
|
|
ld bc, zxuno_port
|
|
ld e, core_addr
|
|
out (c), e
|
|
inc b
|
|
out (c), h
|
|
out (c), l
|
|
out (c), 0
|
|
wreg core_boot, 1
|
|
|
|
; ------------------------------------
|
|
; Calculate start address of bitstream
|
|
; B: number of bitstream
|
|
; Returns:
|
|
; HL: address of bitstream
|
|
; ------------------------------------
|
|
calbit inc b
|
|
IF version<5
|
|
calbi1 ld a, 9
|
|
cp b
|
|
ld hl, $0040
|
|
jr nc, calbi2
|
|
ld hl, $0b80
|
|
calbi2 ld de, $0540
|
|
ELSE
|
|
calbi1 ld hl, $0980
|
|
ld de, $0740
|
|
ENDIF
|
|
calbi3 add hl, de
|
|
djnz calbi3
|
|
ret
|
|
|
|
deixl ld (ix+0), e
|
|
ld (ix+1), d
|
|
deixl1 inc ixl
|
|
inc ixl
|
|
ret
|
|
|
|
; ----------------------------
|
|
; Add an entry to the bootlist
|
|
; ----------------------------
|
|
addbls ld (ix+0), e
|
|
ld (ix+1), d
|
|
push hl
|
|
IF vertical=0
|
|
call str2tmp
|
|
ELSE
|
|
push de
|
|
call str2tmp
|
|
pop hl
|
|
ld a, l
|
|
add a, 25
|
|
ld l, a
|
|
jr nc, addbl0
|
|
inc h
|
|
addbl0 ld (hl), 0
|
|
ENDIF
|
|
pop hl
|
|
addbl1 inc iyl
|
|
call deixl1
|
|
ld a, (items)
|
|
sub 2
|
|
sub iyl
|
|
ret
|
|
|
|
; -------------------------------------
|
|
; Transforms space finished string to a null terminated one
|
|
; HL: end of origin string
|
|
; DE: start of moved string
|
|
; -------------------------------------
|
|
str2tmp 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
|
|
ret
|
|
|
|
; -------------------------------------
|
|
; Show a combo list to select one element
|
|
; Parameters:
|
|
;(corwid)
|
|
; cmbpnt: list of pointers (last is $ffff)
|
|
; A: preselected one
|
|
; HL: X coord (H) and Y coord (L) of the first element
|
|
; DE: window width (D) and window height (E)
|
|
; Returns:
|
|
; A: item selected
|
|
; -------------------------------------
|
|
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, (corwid)
|
|
ld hl, (cmbcor)
|
|
ld h, e
|
|
ld a, (items+1)
|
|
ld e, a
|
|
ld a, (colcmb)
|
|
call window
|
|
ld de, (corwid)
|
|
ld hl, (offsel)
|
|
ld a, (cmbcor)
|
|
add a, h
|
|
sub l
|
|
ld l, a
|
|
ld h, e
|
|
ld e, 1
|
|
ld a, (colcmb-1)
|
|
call window
|
|
call waitky
|
|
ld hl, (offsel)
|
|
sub $0d
|
|
jr c, comboa
|
|
jr z, comboa
|
|
ld bc, (items)
|
|
sub $1c-$0d
|
|
jr nz, combo9
|
|
dec h
|
|
jp m, combo7
|
|
ld a, h
|
|
cp l
|
|
ld (offsel), hl
|
|
jr nc, combo7
|
|
ld a, l
|
|
dec a
|
|
combo8 jr combo4
|
|
combo9 dec a ; $1d
|
|
jr nz, comboa
|
|
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, h
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
; -------------------------------------
|
|
; 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)
|
|
; -------------------------------------
|
|
IF vertical=0
|
|
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
|
|
ELSE
|
|
window push hl
|
|
push de
|
|
ld c, l;h
|
|
push af
|
|
ld a, 23
|
|
sub h
|
|
ld l, a
|
|
pop af
|
|
add hl, hl
|
|
add hl, hl
|
|
add hl, hl
|
|
ld h, $16
|
|
add hl, hl
|
|
add hl, hl
|
|
ld b, 0
|
|
add hl, bc
|
|
ld c, e
|
|
add hl, bc
|
|
|
|
windo1 ld b, e;d
|
|
windo2 dec hl
|
|
ld (hl), a
|
|
djnz windo2
|
|
ld c, e
|
|
add hl, bc
|
|
ld bc, $ffe0
|
|
add hl, bc
|
|
dec d;e
|
|
jr nz, windo1
|
|
pop de
|
|
pop hl
|
|
ret
|
|
ENDIF
|
|
|
|
; -------------------------------------
|
|
; Change corwid and colcmb variables
|
|
; Parameters: PC
|
|
chcol pop hl
|
|
ld a, (hl)
|
|
inc hl
|
|
ld (corwid), a
|
|
ld a, (hl)
|
|
inc hl
|
|
ld (corwid+1), a
|
|
ld a, (hl)
|
|
inc hl
|
|
ld (colcmb), a
|
|
ld a, (hl)
|
|
inc hl
|
|
ld (colcmb-1), a
|
|
jp (hl)
|
|
|
|
; -------------------------------------
|
|
; Wait for a key
|
|
; Returns:
|
|
; A: ascii code of the key
|
|
; -------------------------------------
|
|
waitky ld a, (codcnt)
|
|
sub $80
|
|
jr c, waitky ; Espero la pulsación de una tecla
|
|
ld (codcnt), a
|
|
ret
|
|
|
|
; -----------------------------------------------------------------------------
|
|
; ZX7 Backwards by Einar Saukas, Antonio Villena
|
|
; Parameters:
|
|
; HL: source address (compressed data)
|
|
; DE: destination address (decompressing)
|
|
; -----------------------------------------------------------------------------
|
|
dzx7b ld bc, $8000
|
|
ld a, b
|
|
copyby inc c
|
|
ldd
|
|
mainlo add a, a
|
|
call z, getbit
|
|
jr nc, copyby
|
|
push de
|
|
ld d, c
|
|
defb $30
|
|
lenval add a, a
|
|
call z, getbit
|
|
rl c
|
|
rl b
|
|
add a, a
|
|
call z, getbit
|
|
jr nc, lenval
|
|
inc c
|
|
jr z, exitdz
|
|
ld e, (hl)
|
|
dec hl
|
|
sll e
|
|
jr nc, offend
|
|
ld d, $10
|
|
nexbit add a, a
|
|
call z, getbit
|
|
rl d
|
|
jr nc, nexbit
|
|
inc d
|
|
srl d
|
|
offend rr e
|
|
ex (sp), hl
|
|
ex de, hl
|
|
adc hl, de
|
|
lddr
|
|
exitdz pop hl
|
|
jr nc, mainlo
|
|
ret
|
|
|
|
getbit ld a, (hl)
|
|
dec hl
|
|
adc a, a
|
|
ret
|
|
|
|
drcs inc hl
|
|
ld b, $40 ; filtro RCS inverso
|
|
start4 ld a, b
|
|
xor c
|
|
and $f8
|
|
xor c
|
|
ld d, a
|
|
xor b
|
|
xor c
|
|
rlca
|
|
rlca
|
|
ld e, a
|
|
inc bc
|
|
ldi
|
|
inc bc
|
|
IF vertical=0
|
|
bit 3, b
|
|
jr z, start4
|
|
ELSE
|
|
ld a, b
|
|
sub $58
|
|
jr nz, start4
|
|
dec a
|
|
ENDIF
|
|
ld b, $13
|
|
ldir
|
|
ret
|
|
|
|
|
|
IF vertical=1
|
|
incbin bezel.rcs.zx7b
|
|
finbez
|
|
ENDIF
|
|
|
|
|
|
; ------------------------
|
|
; Load flash structures from $06000 to $9000
|
|
; ------------------------
|
|
loadch wreg flash_cs, 1
|
|
ld de, config
|
|
ld hl, $0060 ;old $0aa0
|
|
ld a, $17
|
|
|
|
; ------------------------
|
|
; Read from SPI flash
|
|
; Parameters:
|
|
; DE: destination address
|
|
; HL: source address without last byte
|
|
; A: number of pages (256 bytes) to read
|
|
; ------------------------
|
|
rdflsh ex af, af'
|
|
xor a
|
|
push hl
|
|
wreg flash_cs, 0 ; activamos spi, enviando un 0
|
|
wreg flash_spi, 3 ; envio flash_spi un 3, orden de lectura
|
|
pop hl
|
|
push hl
|
|
out (c), h
|
|
out (c), l
|
|
out (c), a
|
|
ex af, af'
|
|
ex de, hl
|
|
in f, (c)
|
|
rdfls1 ld e, $20
|
|
rdfls2 ini
|
|
inc b
|
|
ini
|
|
inc b
|
|
ini
|
|
inc b
|
|
ini
|
|
inc b
|
|
ini
|
|
inc b
|
|
ini
|
|
inc b
|
|
ini
|
|
inc b
|
|
ini
|
|
inc b
|
|
dec e
|
|
jr nz, rdfls2
|
|
dec a
|
|
jr nz, rdfls1
|
|
wreg flash_cs, 1
|
|
pop hl
|
|
ret
|
|
|
|
; -----------------------------------------------------------------------------
|
|
; Print string routine
|
|
; Parameters:
|
|
; BC: X coord (B) and Y coord (C)
|
|
; IX: null terminated string
|
|
; -----------------------------------------------------------------------------
|
|
IF vertical=0
|
|
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, $b0 >> 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, $bc >> 2
|
|
ld bc, $04fc
|
|
call doble
|
|
pos4 ld a, (ix)
|
|
inc ix
|
|
add a, a
|
|
ret z
|
|
ld h, $b8 >> 2
|
|
ld bc, $04f0
|
|
call doble
|
|
pos6 ld a, (ix)
|
|
inc ix
|
|
add a, a
|
|
ret z
|
|
ld h, $b4 >> 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
|
|
ELSE
|
|
prnstr push bc
|
|
call prnstr1
|
|
pop bc
|
|
inc c
|
|
ret
|
|
prnstr1 ld a, b
|
|
add a, b
|
|
add a, b
|
|
add a, a
|
|
cpl
|
|
add a, 192
|
|
ld e, a
|
|
rrca
|
|
rrca
|
|
rrca
|
|
and %00011000
|
|
xor e
|
|
and %11111000
|
|
xor e
|
|
or %01000000
|
|
ld d, a
|
|
ld a, e
|
|
rlca
|
|
rlca
|
|
and %11100000
|
|
add a, c
|
|
ld e, a
|
|
prnstr2 ld a, (ix)
|
|
inc ix
|
|
add a, a
|
|
ret z
|
|
ld h, $b0 >> 2
|
|
ld b, 6
|
|
ld l, a
|
|
add hl, hl
|
|
add hl, hl
|
|
prnstr3 ld a, (hl)
|
|
ld (de), a
|
|
ld a, d
|
|
and $07
|
|
jr nz, prnstr4
|
|
ld a, e
|
|
sub $20
|
|
ld e, a
|
|
jr c, prnstr4
|
|
ld a, d
|
|
add a, $08
|
|
ld d, a
|
|
prnstr4 dec d
|
|
inc l
|
|
djnz prnstr3
|
|
jr prnstr2
|
|
ENDIF
|
|
|
|
|
|
; -----------------------------------------------------------------------------
|
|
; 6x8 character set (128 characters x 1 rotation)
|
|
; -----------------------------------------------------------------------------
|
|
chrstr
|
|
IF vertical=0
|
|
incbin fuente6x8.bin
|
|
ELSE
|
|
incbin fuente8x6.bin
|
|
ENDIF
|
|
chrend
|
|
|
|
cad62 defb 'ZX Spectrum', 0
|
|
|
|
IF 0
|
|
block $3000-$
|
|
bnames defb 'Sam Coupe '
|
|
defb 'Jupiter ACE '
|
|
defb 'Master System '
|
|
defb 'Atari 800 XL '
|
|
defb 'BBC Micro '
|
|
defb 'VIC-20 '
|
|
defb 'Acorn Electron '
|
|
defb 'Oric Atmos '
|
|
defb 'Apple 2 (VGA) '
|
|
ENDIF
|
|
block $4000-$
|