The file below puts some stars in screen.
I tried to put the data of the stars in page 2 in stead of page 0.
But how do I set the computer to start readout spritedata (attribute table, color table etc) from page 2???
ORG 0C200H
LD HL,0F3E9H ; Ini screen 8
XOR A
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
LD A,8
CALL 5FH
LD A,63 ; Page 1
OUT (99H),A ; (Sprite-tabellen staan wel op page 0)
LD A,2+128
OUT (99H),A
CALL AAN ; Ini sprites en zet hook
JOOP: LD A,(0FBEDH) ; Wacht op spatie
BIT 0,A
JR NZ,JOOP
CALL UIT
LD HL,0F3E9H
LD (HL),15
INC HL
LD (HL),4
INC HL
LD (HL),4
XOR A
CALL 5FH
RET
AAN: CALL 69H ; Initialisatie sterrenhemel
DI
LD A,(0F3E0H) ; Sprites 8*8, niet vergroot
AND 252
LD (0F3E0H),A
OUT (99H),A
LD A,129
OUT (99H),A
; Zet VRAM-adres &HFA00 (sprite-kleurtabel)
LD HL,0FA00H
LD B,0
CALL SETVDP
LD A,15 ; (Alleen kleur van bovenste lijn is nodig)
OUT (98H),A
LD HL,0F000H ; Vul patroon van spritenr. 0 (1 puntje)
LD B,0
CALL SETVDP ; (de volgende 9 bytes zijn al 0, call &H69)
LD A,128
OUT (98H),A
XOR A
LD B,15
LOOP2: OUT (98H),A
DJNZ LOOP2
LD HL,0F800H ; Vul kleurtabel
LD B,0
CALL SETVDP
LD C,32
LOOP0: LD A,15
OUT (98H),A
XOR A
LD B,15
LOOP1: OUT (98H),A
DJNZ LOOP1
DEC C
JR NZ,LOOP0
LD HL,0FD9FH
LD DE,OLDHOO
LD BC,5
LDIR
LD A,0C3H
LD (0FD9FH),A
LD HL,STARS
LD (0FDA0H),HL
EI
RET
UIT: DI ; Reset hook
LD HL,OLDHOO
LD DE,0FD9FH
LD BC,5
LDIR
EI
RET
STARS: DI ; Zet sprites neer
LD B,32
LD HL,DATSP2
LOOP!!: PUSH BC
INC HL ; Tel X-waarde op
LD A,(HL)
INC HL
INC HL
ADD A,(HL)
DEC HL
DEC HL
LD (HL),A
DEC HL
LD D,(HL) ; Bereken VRAM-adres waar sprite komt
INC D ; ( (Y+1)*256+X )
LD E,A
EX DE,HL ; Kijk of er plaatje staat
LD B,65
CALL SETVDP
IN A,(98H)
PUSH AF
EX DE,HL
LD DE,0FA00H-DATSP2
ADD HL,DE ; Zet VRAM-adres van attribuut-tabel
LD B,0
CALL SETVDP
POP AF
OR A
JR Z,PUTSTR
SBC HL,DE
LD A,220 ; Plaatje op voorgrond: zet sprite weg.
OUT (98H),A
LD DE,4
ADD HL,DE
JR VERDER
PUTSTR: SBC HL,DE ; Geen plaatje: zet sprite neer.
LD BC,0498H
OTIR
VERDER: POP BC
DJNZ LOOP!!
EI
OLDHOO: DEFB 0,0,0,0,0
; Sprite-info-tabel: Y-coord / X-coord / spritenummer / X-snelheid
; (4e byte was kleurnr op MSX1, maar wordt toch niet gebruikt)
DATSP2: DEFB 15,230,0,5,20,237,0,5,25,136,0,6,30,46,0,4
DEFB 35,66,0,5,40,216,0,6,45,206,0,3,50,1,0,4
DEFB 55,154,0,2,60,61,0,5,65,41,0,6,70,212,0,4
DEFB 75,10,0,3,80,229,0,4,85,124,0,6,90,128,0,3
DEFB 95,184,0,4,100,152,0,7,105,167,0,2,110,50,0,2
DEFB 115,118,0,2,120,234,0,6,125,68,0,7,120,169,0,3
DEFB 135,80,0,4,140,111,0,5,145,24,0,7,150,152,0,7
DEFB 155,147,0,6,160,44,0,6,165,235,0,3,170,10,0,5
; Naam : SETVDP
; Funktie : Zet de VDP op schrijven of lezen
; Invoer : HL = VRAM-adres, B = >bit 0 pagina >bit 6 schrijven(0) of lezen(1)
; Uitvoer : C = datalees of dataschrijfpoort
; Verandert: AF,BC
SETVDP: LD C,99H
LD A,H
AND 0C0H
PUSH BC
RES 6,B
OR B
RLCA
RLCA
OUT (C),A
LD A,14 OR 128
OUT (C),A
LD A,H
OUT (C),L
POP BC
RES 0,B
AND 3FH
OR B
XOR 64
OUT (C),A
DEC C
RET
RES 0,B
AND
|