Aqui vão alguns pequenos exemplos, apenas como referência e tira-dúvidas, quando voltei a programar para MSX, um monte de coisa já tinha escapado da minha cabeça de bagre, e hoje, estou meio velho para decorar estes trecos, enquanto eu estou programando vai de boa, mas basta eu dar uma pausa de algumas semanas ou meses, e pronto, não lembro mais de alguns detalhes, então vou compilar aqui alguns exemplos de tarefas que podem ser interessantes.São exemplos os mais toscos possíveis, tem jeito de fazer melhor? com certeza, mas para o objetivo proposto está legal
Chamada da BIOS (MAIN ROM) a partir do MSX-DOS
CALSLT equ #001c
EXPTBL equ #fcc1
CHGCLR equ #0062
FORCLR equ #f3f9
BAKCLR equ #F3ea
start ld a,15
ld (FORCLR),a
ld a,4
ld (BAKCLR),a
call xColor
ret xColor ; Faz uma chamada interslots para a BIOS
ld iy,(EXPTBL-1) ; Funciona apenas para a MAIN ROM
ld ix,CHGCLR ; Para a SUB ROM, deve ser visto o outro
call CALSLT ; Exemplo
ret
Chamada da BIOS (SUB ROM) a partir do MSX-DOS
; CALSUB
;
; In: IX = address of routine in MSX2 SUBROM
; AF, HL, DE, BC = parameters for the routine
;
; Out: AF, HL, DE, BC = depending on the routine
;
; Changes: IX, IY, AF’, BC’, DE’, HL’
;
; Call MSX2 subrom from MSXDOS. Should work with all versions of MSXDOS.
;
; Notice: NMI hook will be changed. This should pose no problem as NMI is
; not supported on the MSX at all.
;
CALSLT: EQU #001C
NMI: EQU #0066
EXTROM: EQU #015f
EXPTBL: EQU #fcc1
H_NMI: EQU #fdd6
;
CALSUB: exx
ex af,af’ ; store all registers
ld hl,EXTROM
push hl
ld hl,#C300
push hl ; push NOP ; JP EXTROM
push ix
ld hl,#21DD
push hl ; push LD IX,[entry]
ld hl,#3333
push hl ; push INC SP; INC SP
ld hl,0
add hl,sp ; HL = offset of routine
ld a,#C3
ld (H_NMI),a
ld (H_NMI+1),hl ; JP [routine] in NMI hook
ex af,af’
exx ; restore all registers
ld ix,NMI
ld iy,(EXPTBL-1)
call CALLSLT ; call NMI-hook via NMI entry in ROMBIOS
; NMI-hook will call SUBROM
exx
ex af,af’ ; store all returned registers
ld hl,10
add hl,sp
ld sp,hl ; remove routine from stack
ex af,af’
exx ; restore all returned registers
ret