Autor
| Something about IE0 / IE1 bits and R#19
| Edwin msx professional Posts: 626 | Postado em: 29 Setembro 2008, 22:33   | If it's exotic, it's probably wbass2 format. There is a wb2txt app somewhere.
| | Vincent van Dam msx addict Posts: 382 | Postado em: 29 Setembro 2008, 23:17   | It could be in compass also, wb2txt can be found here. | | Vincent van Dam msx addict Posts: 382 | Postado em: 29 Setembro 2008, 23:17   | (double post)
| | ARTRAG msx master Posts: 1737 | Postado em: 29 Setembro 2008, 23:20   | it is wbass2, i used wb2txt
thanks!
| | monant msx user Posts: 33 | Postado em: 29 Setembro 2008, 23:22   | I used wbass2 assembler
forgive the bad style..of the following text
&HD000 ;[ C = &h9A , HL = PALTBL , B = Hint counter]
&HD000 ;[ Start from Color 0 , Palette Pointer automatically increments]
&HD000 ;[ C' = &h99 , HL'= ADJTBL , B' = reg.18 , D' = scanLINE counter , E' = reg.19]
&HD000 EDA3 INTH: OUTI ;[ VDP Port 02 data for Palette Red and Blu]
&HD002 EDA3 OUTI ;[ VDP Port 02 data for Palette Green]
&HD004 D9 EXX ;[ Z80 ALTERNATE REGISTERS]
&HD005 7E LD A,(HL) ;[ read data from ADJTBL]
&HD006 ED79 OUT (C),A ;[ VDP Port 01 write data]
&HD008 ED41 OUT (C),B ;[ VDP Port 01 to reg.18 adjust register]
&HD00A 23 INC HL ;[ HL' points to next data ]
&HD00B ED78 IN A,(C) ;[ VDP Port 01 read status reg.1 allow next Hint]
&HD00D 14 INC D ;[ D' Points to next scanLINE ]
&HD00E ED51 OUT (C),D ;[ VDP Port 01 ]
&HD010 ED59 OUT (C),E ;[ VDP Port 01 reg.19 Hint LINE register ]
&HD012 D9 EXX ;[Z80 MAIN REGISTERS]
&HD013 04 INC B ;[ Trick! OUTI + OUTI: B=B-2 ,INC B: B = B+1]
&HD014 CA19D0 JP Z,AFTER ;[ so B = B-1 ,if B=0 zero then Hints finished]
&HD017 FB EI ;[ else Enable Z80 int and go back to MAIN LOOP]
&HD018 C9 RET
&HD019 CD02D1 AFTER: CALL HINTOF ;[LINE 0-190 Upper Frame done!, Disable VDP Hint]
&HD01C 3EC0 LD A,192 ;{ now OVERSCAN EFFECT
&HD01E CD96D1 CALL WINT ;[wait scanline 192,VDP is looking for limit=212]
&HD021 CD84D1 CALL OVR192 ;[set limit=192 VDP still looking for limit=212]
&HD024 3ED4 LD A,212
&HD026 CD96D1 CALL WINT ;[wait scanline 212,VDP is looking for limit=192]
&HD029 CD8DD1 CALL OVR212 ;[set limit=212 VDP still looking for limit=192]}
&HD02C 3ADAD0 LD A,(LUN) ;[restore B = Hint counter]
&HD02F 47 LD B,A
&HD030 3AE5D0 LD A,(FRMCNT) ;[increment frames counter]
&HD033 3C INC A
&HD034 32E5D0 LD (FRMCNT),A ;[save it]
&HD037 FED4 CP 212 ;[ 212 frames done?]
&HD039 CA2DD1 JP Z,RSTLN0 ;[ Yes ,jump to RSTLN0 restart from frame 0]
&HD03C 2AE1D0 LD HL,(PALPTR) ;[ No ,start the SHIFTING COLORS EFFECT ]
&HD03F 23 INC HL ;[ PALPTR =PALPTR+2 ,point to next color]
&HD040 23 INC HL
&HD041 22E1D0 LD (PALPTR),HL ;[ Store it ]
&HD044 D9 EXX ;[ Z80 ALTERNATE REGISTERS]
&HD045 2ADFD0 LD HL,(ADJPTR) ;[ This is the WAVE EFFECT ]
&HD048 23 INC HL ;[ ADJPTR =ADJPTR+1 ,point to next value]
&HD049 22DFD0 LD (ADJPTR),HL ;[ Store it]
&HD04C 3AD9D0 GAMMA2: LD A,(LINE) ;[ begin from start]
&HD04F 57 LD D,A ;[ D' = A]
&HD050 ED51 OUT (C),D ;[ VDP Port 01 write data to]
&HD052 ED59 OUT (C),E ;[ VDP Port 01 reg.19 Hint LINE register ]
&HD054 D9 EXX ;[ Z80 MAIN REGISTERS]
&HD055 AF XOR A ;[ A= 0 set color 0]
&HD056 D39B OUT (&H9B),A ;[ VDP Port 03 =reg.16 to Palette Pointer ]
&HD058 CDE9D0 CALL STOP ;[ Check if ESC key is pressed ]
&HD05B FE00 CP 0
&HD05D CA6BD0 JP Z,BASIC ;[ yes ? go to BASIC ]
&HD060 CDA4D1 CALL SETPAG
&HD063 CD41D1 CALL MOVSPR
&HD066 CDF6D0 CALL HINTON
&HD069 FB EI
&HD06A C9 RET
&HD06B 0E99 BASIC: LD C,&H99 ;[ read status reg.0 ]
&HD06D ED78 IN A,(C) ;[ to clear pending interrupts]
&HD06F CD02D1 CALL HINTOF ;[ disable VDP Hint ]
&HD072 CD0ED1 CALL VINTON ;[ enable VDP Vint ]
&HD075 AF XOR A ;[ select status register 0]
&HD076 CD26D1 CALL STAT
&HD079 3AFDD1 LD A,(SECSLT) ;[ restore secondary slot register]
&HD07C 32FFFF LD (&HFFFF),A
&HD07F 3AFED1 LD A,(PRISLT) ;[ restore primary slot register]
&HD082 D3A8 OUT (&HA8),A
&HD084 DDE1 POP IX ;[ remove garbage from stack ]
&HD086 FB EI ;[ enable Z80 int ]
&HD087 C9 RET ;[ GO BACK TO BASIC]
&HD088 FB SETUP: EI ;[enable Z80 int...VDP Vint must be enabled!]
&HD089 76 HALT ;[wait for a Vint form VDP]
&HD08A F3 DI ;[disable Z80 int]
&HD08B DB99 IN A,(&H99) ;[read status reg.0 to enable next interrupts]
&HD08D CD1AD1 CALL VINTOF ;[disable VDP Vint]
&HD090 CDD3D1 CALL RAMSEL ;[slot select.......Minimum RAM required 64K !]
&HD093 2100D0 LD HL,INTH ;{[move Hint Routine from page 3 to page 0]
&HD096 113800 LD DE,&H38
&HD099 010001 LD BC,256
&HD09C EDB0 LDIR ;}
&HD09E D9 EXX ;[Z80 ALTERNATE REGISTERS]
&HD09F 0E99 LD C,&H99 ;[ C'= VDP Port 01 ]
&HD0A1 3AD9D0 LD A,(LINE) ;[ A = start interrupt from LINE +1]
&HD0A4 57 LD D,A ;[ D'= A]
&HD0A5 0692 LD B,18+128 ;[ B'= VDP reg.18 (adjust register)]
&HD0A7 1E93 LD E,19+128 ;[ E'= VDP reg.19 (Hint line register)]
&HD0A9 2ADBD0 LD HL,(ADJTBL) ;[ HL'= points to an array of bytes for reg.18]
&HD0AC 22DFD0 LD (ADJPTR),HL ;[ save it to location ADJPTR ]
&HD0AF 3E01 LD A,1 ;[status register 1]
&HD0B1 CD26D1 CALL STAT ;[select it...work with STATUS reg.1]
&HD0B4 ED78 IN A,(C) ;[read it to clear possible pending interrupts]
&HD0B6 ED51 OUT (C),D ;[set Hint line]
&HD0B8 ED59 OUT (C),E ;[set Hint line]
&HD0BA 3E90 LD A,16+128 ;[ VDP reg.16 (color palette pointer)]
&HD0BC ED79 OUT (C),A ;[10XXXXXX indirect access NON autoincr. mode]
&HD0BE 3E91 LD A,17+128 ;[ VDP reg.17 (register pointer) ]
&HD0C0 ED79 OUT (C),A ;[ VDP port 03 = reg.16]
&HD0C2 D9 EXX ;[Z80 MAIN REGISTERS]
&HD0C3 2ADDD0 LD HL,(PALTBL) ;[ HL= points to an array of bytes for Palette]
&HD0C6 22E1D0 LD (PALPTR),HL ;[ save it to location PALPTR]
&HD0C9 CDF6D0 CALL HINTON ;[enable VDP hint]
&HD0CC 0E9A LD C,&H9A ;[ C = VDP Port 02]
&HD0CE 3ADAD0 LD A,(LUN) ;[ A = number of interrupt to be generated]
&HD0D1 47 LD B,A ;[ B = A]
&HD0D2 AF XOR A ;[ A = 0]
&HD0D3 D39B OUT (&H9B),A ;[ VDP reg.16 = 0, set palette pointer to 0]
&HD0D5 FB EI ;[enable Z80 interrupts]
&HD0D6 C3D6D0 LOOP: JP LOOP ;[MAIN LOOP....wait for interrupts]
&HD0D9 FF LINE: DB 255 ;[255 Hint at scanLINE0 ,0 Hint at scanLINE1...]
&HD0DA BE LUN: DB 190 ;[number of Hint ,safe value for Overscan]
&HD0DB 00C4 ADJTBL: DB 0,&HC4
&HD0DD 00C0 PALTBL: DB 0,&HC0
&HD0DF 0000 ADJPTR: DB 0,0
&HD0E1 0000 PALPTR: DB 0,0
&HD0E3 00C8 SPRTBL: DB 0,&HC8
&HD0E5 D4 FRMCNT: DB 212
&HD0E6 00 PAG: DB 0
&HD0E7 0A DELAY: DB 10
&HD0E8 0A DELBCK: DB 10
&HD0E9 DBAA STOP: IN A,(&HAA) ; [ check if ESC key is pressed ]
&HD0EB E6F0 AND &B11110000
&HD0ED C607 ADD A,7
&HD0EF D3AA OUT (&HAA),A
&HD0F1 DBA9 IN A,(&HA9)
&HD0F3 E604 AND 4
&HD0F5 C9 RET
&HD0F6 3ADFF3 HINTON: LD A,(&HF3DF) ;[enable VDP Hint]
&HD0F9 CBE7 SET 4,A
&HD0FB D399 OUT (&H99),A
&HD0FD 3E80 LD A,0+128
&HD0FF D399 OUT (&H99),A
&HD101 C9 RET
&HD102 3ADFF3 HINTOF: LD A,(&HF3DF) ;[disable VDP Hint]
&HD105 CBA7 RES 4,A
&HD107 D399 OUT (&H99),A
&HD109 3E80 LD A,0+128
&HD10B D399 OUT (&H99),A
&HD10D C9 RET
&HD10E 3AE0F3 VINTON: LD A,(&HF3E0) ;[enable VDP Vint]
&HD111 CBEF SET 5,A
&HD113 D399 OUT (&H99),A
&HD115 3E81 LD A,1+128
&HD117 D399 OUT (&H99),A
&HD119 C9 RET
&HD11A 3AE0F3 VINTOF: LD A,(&HF3E0) ;[disable VDP Vint]
&HD11D CBAF RES 5,A
&HD11F D399 OUT (&H99),A
&HD121 3E81 LD A,1+128
&HD123 D399 OUT (&H99),A
&HD125 C9 RET
&HD126 D399 STAT: OUT (&H99),A ;[select reg.A STATUS register]
&HD128 3E8F LD A,15+128
&HD12A D399 OUT (&H99),A
&HD12C C9 RET
&HD12D 2ADDD0 RSTLN0: LD HL,(PALTBL) ;[ restore PALTBL pointer ]
&HD130 22E1D0 LD (PALPTR),HL
&HD133 AF XOR A ;[ reset frames counter ]
&HD134 32E5D0 LD (FRMCNT),A
&HD137 D9 EXX ;[ Z80 ALTERNATE REGISTERS ]
&HD138 2ADBD0 LD HL,(ADJTBL) ;[restore ADJTBL pointer ]
&HD13B 22DFD0 LD (ADJPTR),HL
&HD13E C34CD0 JP GAMMA2 ;[ return to GAMMA2]
&HD141 E5 MOVSPR: PUSH HL
&HD142 C5 PUSH BC
&HD143 2AE3D0 LD HL,(SPRTBL)
&HD146 110400 LD DE,4
&HD149 AF XOR A
&HD14A F5 ADDIZ: PUSH AF
&HD14B 7E LD A,(HL)
&HD14C FED8 CP &HD8
&HD14E C252D1 JP NZ,SKIP
&HD151 34 INC (HL)
&HD152 34 SKIP: INC (HL)
&HD153 19 ADD HL,DE
&HD154 F1 POP AF
&HD155 3C INC A
&HD156 FE20 CP 32
&HD158 C24AD1 JP NZ,ADDIZ
&HD15B 210076 LD HL,&H7600 ;base (28)
&HD15E AF XOR A
&HD15F CB04 RLC H
&HD161 17 RLA
&HD162 CB04 RLC H
&HD164 17 RLA
&HD165 CB3C SRL H
&HD167 CB3C SRL H
&HD169 D399 OUT (&H99),A
&HD16B 3E8E LD A,14+128
&HD16D D399 OUT (&H99),A
&HD16F 7D LD A,L
&HD170 00 NOP
&HD171 D399 OUT (&H99),A
&HD173 7C LD A,H
&HD174 F640 OR 64
&HD176 D399 OUT (&H99),A
&HD178 0680 LD B,128
&HD17A 0E98 LD C,&H98
&HD17C 2AE3D0 LD HL,(SPRTBL)
&HD17F EDB3 OTIR
&HD181 C1 POP BC
&HD182 E1 POP HL
&HD183 C9 RET
&HD184 3E02 OVR192: LD A,2 ;[ set screen height to 192 ]
&HD186 D399 OUT (&H99),A
&HD188 3E89 LD A,9+128
&HD18A D399 OUT (&H99),A
&HD18C C9 RET
&HD18D 3E82 OVR212: LD A,2+128 ;[ set screen height to 212 ]
&HD18F D399 OUT (&H99),A
&HD191 3E89 LD A,9+128
&HD193 D399 OUT (&H99),A
&HD195 C9 RET
&HD196 D399 WINT: OUT (&H99),A ;[ Z80 reg.A = LINE to wait for]
&HD198 3E93 LD A,&H93 ;[ VDP reg.19 write ]
&HD19A D399 OUT (&H99),A
&HD19C DB99 WINT1: IN A,(&H99) ;[ wait until LINE reg.A is reached ]
&HD19E E601 AND 1
&HD1A0 CA9CD1 JP Z,WINT1
&HD1A3 C9 RET
&HD1A4 3AE7D0 SETPAG: LD A,(DELAY) ;[ DELAY = Frames counter (between Page switching]
&HD1A7 3D DEC A ;[ Time to change Page?]
&HD1A8 32E7D0 LD (DELAY),A
&HD1AB C0 RET NZ ;[ no? Return ]
&HD1AC 3AE8D0 LD A,(DELBCK) ;[ yes? Restore DELAY ]
&HD1AF 32E7D0 LD (DELAY),A
&HD1B2 3AE6D0 LD A,(PAG) ;[ PAGE = Displayed Page ]
&HD1B5 5F LD E,A ;[ store it temporarly in E ]
&HD1B6 3C INC A ;[ preset next page ]
&HD1B7 32E6D0 LD (PAG),A ;[ update PAGE ]
&HD1BA FE04 CP 4 ;[ end of pages? (maximum 4 pages) ]
&HD1BC 7B LD A,E ;[ No ,restore A ]
&HD1BD C2C4D1 JP NZ,STPG ;[ and SETPAGE ]
&HD1C0 AF XOR A ;[ Yes ,restart from ]
&HD1C1 32E6D0 LD (PAG),A ;[ update PAGE ]
&HD1C4 7B STPG: LD A,E ;[ SETPAGE routine for screen 5 ]
&HD1C5 87 ADD A,A
&HD1C6 87 ADD A,A
&HD1C7 87 ADD A,A
&HD1C8 87 ADD A,A
&HD1C9 87 ADD A,A
&HD1CA C61F ADD A,31
&HD1CC D399 OUT (&H99),A
&HD1CE 3E82 LD A,2+128
&HD1D0 D399 OUT (&H99),A
&HD1D2 C9 RET
&HD1D3 3AFFFF RAMSEL: LD A,(&HFFFF) ;[ read secondary slot register ]
&HD1D6 2F CPL ;[ complement ]
&HD1D7 32FDD1 LD (SECSLT),A ;[ store it to SECSLT ]
&HD1DA E6FC AND &B11111100 ;[ cut bit 0 and bit 1 ]
&HD1DC 57 LD D,A ;[ save value to D ]
&HD1DD E6C0 AND &B11000000 ;[ cut from bit 2 to bit 5 ]
&HD1DF CB07 RLC A ;[ move bit 6 and bit 7 to bit 0 and bit 1 ]
&HD1E1 CB07 RLC A
&HD1E3 5F LD E,A
&HD1E4 7A LD A,D
&HD1E5 83 ADD A,E
&HD1E6 32FFFF LD (&HFFFF),A
&HD1E9 DBA8 IN A,(&HA8)
&HD1EB 32FED1 LD (PRISLT),A
&HD1EE E6FC AND &B11111100
&HD1F0 57 LD D,A
&HD1F1 E6C0 AND &B11000000
&HD1F3 CB07 RLC A
&HD1F5 CB07 RLC A
&HD1F7 5F LD E,A
&HD1F8 7A LD A,D
&HD1F9 83 ADD A,E
&HD1FA D3A8 OUT (&HA8),A
&HD1FC C9 RET
&HD1FD 00 SECSLT: DB 0
&HD1FE 00 PRISLT: DB 0
&HD1FF
&HD1FF
&HD1FF
&HD1FF
&HD1FF
&HD1FF
0
&HD1FF
&HD1FF
&HD1FF
&HD1FF
&HD1FF
&HD1FF RLC A
&HD1F7 5F LD E,A
&HD1F8 7A LD A,D
&HD1F9 83 ADD A,E
&HD1FA D3A8 OUT (&HA8),A
&HD1FC C9 RET
&HD1FD 00 SECSLT: DB 0
&HD1FE 00 PRISLT: DB 0
&HD1FF
 | | ro msx guru Posts: 2346 | Postado em: 30 Setembro 2008, 09:06   | in WBASS just SAVE/A to save an ASCII version of the source
the listing posted above is a DISasm, not a source.
hint to monant: use the code tags to post code  | |
| |
| |