vdp1regs: equ #f3df ; kopie MSX 1 VDP regs nr1regs: equ 8 ; # MSX 1 VDP regs vdp2regs: equ #ffdf ; kopie MSX 2 VDP regs nr2regs: equ 24 ; # MSX 2 VDP regs vdp3regs: equ #ffe1 ; kopie MSX 2+ VDP regs ; ******************************* ; * Set a VDP register without taking ; * the waittime on the MSX turbo R ; * into account ; * in: B = value ; * C = register number ; * uit: EI setreg1: di ld a,b out (#99),a ; write value to vdp ld a,c or #80 out (#99),a ; and register number call storevalue ; store value in system area ei ret ; ******************************* ; * Set a VDP register, taking into account ; * the waittime on the MSX turbo R; store ; * the value in memory between the two ; * consecutive VDP operations. In this way, ; * a part of the 57 clock cycle wait time ; * for the second VDP operation will be used ; * effectively ; * in: B = value ; * C = register number ; * uit: EI setreg2: di ld a,b out (#99),a ; send value to VDP call storevalue ; store value in system area ld a,c or #80 out (#99),a ; send register number to VDP ei ret ; ******************************* ; * Store VDP register value in MSX system area ; * in: B = value ; * C = register number storevalue: ld a,c ; A = register number ld hl,vdp1regs cp nr1regs jr c,storev2 ; MSX 1 register ld hl,vdp2regs cp nr2regs jr c,storev2 ; MSX 2 register ld hl,vdp3regs ; MSX 2+ register storev2: add a,l ld l,a jr nc,$+3 inc h ; HL += register number ld (hl),b ; store value ret