mirror of https://github.com/zxdos/zxuno.git
120 lines
3.7 KiB
NASM
120 lines
3.7 KiB
NASM
; API de ESXDOS.
|
|
include "esxdos.inc"
|
|
include "errors.inc"
|
|
|
|
; KEYMAP. Una utilidad para cargar un mapa de teclado en el ZX-Uno
|
|
; Necesita sólamente un nombre de fichero de mapa, que debe estar
|
|
; guardado en /SYS/KEYMAPS dentro de la tarjeta SD donde esté ESXDOS.
|
|
|
|
;Para ensamblar con PASMO como archivo binario (no TAP)
|
|
|
|
ZXUNOADDR equ 0fc3bh
|
|
ZXUNODATA equ 0fd3bh
|
|
|
|
org 2000h ;comienzo de la ejecución de los comandos ESXDOS.
|
|
|
|
Main proc
|
|
ld a,h
|
|
or l
|
|
jr z,PrintUso ;si no se ha especificado nombre de fichero, imprimir uso
|
|
call RecogerNFile
|
|
|
|
call ReadMap
|
|
ret
|
|
|
|
PrintUso ld hl,Uso
|
|
BucPrintMsg ld a,(hl)
|
|
or a
|
|
ret z
|
|
rst 10h
|
|
inc hl
|
|
jr BucPrintMsg
|
|
endp
|
|
|
|
|
|
RecogerNFile proc ;HL apunta a los argumentos (nombre del fichero)
|
|
ld de,BufferNFich
|
|
CheckCaracter ld a,(hl)
|
|
or a
|
|
jr z,FinRecoger
|
|
cp " "
|
|
jr z,FinRecoger
|
|
cp ":"
|
|
jr z,FinRecoger
|
|
cp 13
|
|
jr z,FinRecoger
|
|
ldi
|
|
jr CheckCaracter
|
|
FinRecoger xor a
|
|
ld (de),a
|
|
inc de ;DE queda apuntando al buffer este que se necesita en OPEN, no sé pa qué.
|
|
ret
|
|
endp
|
|
|
|
|
|
ReadMap proc
|
|
xor a
|
|
rst 08h
|
|
db M_GETSETDRV ;A = unidad actual
|
|
ld b,FA_READ ;B = modo de apertura
|
|
ld hl,MapFile ;HL = Puntero al nombre del fichero (ASCIIZ)
|
|
rst 08h
|
|
db F_OPEN
|
|
ret c ;Volver si hay error
|
|
ld (FHandle),a
|
|
|
|
ld bc,ZXUNOADDR
|
|
ld a,7
|
|
out (c),a ;select KEYMAP register
|
|
|
|
ld b,4 ;4 chunks of 4096 bytes each to load
|
|
BucReadMapFromFile push bc
|
|
|
|
ld bc,4096
|
|
ld hl,Buffer
|
|
ld a,(FHandle)
|
|
rst 08h
|
|
db F_READ
|
|
jr c,PrematureEnd ;si error, fin de lectura
|
|
|
|
ld hl,Buffer
|
|
ld bc,ZXUNODATA
|
|
ld de,4096
|
|
BucWriteMapToFPGA ld a,(hl)
|
|
out (c),a
|
|
inc hl
|
|
dec de
|
|
ld a,d
|
|
or e
|
|
jr nz,BucWriteMapToFPGA
|
|
|
|
pop bc
|
|
djnz BucReadMapFromFile
|
|
|
|
jr FinReadMap
|
|
|
|
PrematureEnd pop bc
|
|
push af
|
|
ld a,(FHandle)
|
|
rst 08h
|
|
db F_CLOSE
|
|
pop af
|
|
ret
|
|
|
|
FinReadMap ld a,(FHandle)
|
|
rst 08h
|
|
db F_CLOSE
|
|
or a ;Volver sin errores a ESXDOS
|
|
ret
|
|
endp
|
|
|
|
; 01234567890123456789012345678901
|
|
Uso db " KEYMAP file",13,13
|
|
db "Loads the specified keymap from",13
|
|
db "/SYS/KEYMAPS and enables it.",13,0
|
|
|
|
FHandle db 0
|
|
|
|
Buffer ds 4096 ;4KB para buffer de lectura
|
|
MapFile db "/SYS/KEYMAPS/"
|
|
BufferNFich equ $ ;resto de la RAM para el nombre del fichero |