;SCPDU 6 Preview demo ;~~~~~~~~~~~~~~~~~~~~ ;(c)1992 Simon Cooke ;MERGE IN DATA: ;-------------- ORG &C000 DUMP 4,0 MDAT "MOLEMUSIC" ;The fun starts here!!! ORG 0 DUMP 1,0 DI LD HL,&8000+reset.screen ;put the reset screen in page 0 LD DE,&4000 LD BC,6911 LDIR LD A,83 ;set line interrupt on scan line 83 OUT (&F9),A XOR A ;set border to black OUT (&FE),A IM 1 LD SP,&8000 ;set stack LD A,33 ;jump down to low memory. OUT (&FA),A JP initialise ORG &38 DUMP 1,&38 interrupt: ;interrupt handler. PUSH AF IN A,(&F9) RRA line.addr: ;self-modifying LINE INTERRUPT vector JP NC,line.int1 POP AF EI RET exit.int: DEFB &ED,&71 ;OUT (C),0 POP AF RET ORG &66 ;NMI -- ignored really. DUMP 1,&66 EI RETN line.int1: LD A,1 ;check for required scan line... IN A,(&F8) CP 84 JP NZ,line.int1 PUSH BC LD BC,&00F8 ;set background to white (line across screen) LD A,&7F OUT (C),A LD A,&2D ;page MODE 2 screen text area to display. OUT (&FC),A LD A,85 ;set up line interrupt for line 85 OUT (&F9),A PUSH HL LD HL,line.int2 ;vector to line.int2 on line 85 LD (line.addr+1),HL POP HL POP BC POP AF EI RET ;return from line interrupt. line.int2: XOR A ;turn the white line off (palette to black) OUT (&F8),A LD A,189 ;set up line interrupt for line 189 OUT (&F9),A PUSH HL LD HL,line.int3 ;vector to line.int3 on line 189 LD (line.addr+1),HL IN A,(&FB) POP HL POP AF EI RET line.int3: LD A,1 ;wait for line 190 IN A,(&F8) CP 190 JP NZ,line.int3 PUSH BC ;turn a white line on LD A,&7F LD BC,&00F8 OUT (C),A LD A,191 ;set up line interrupt for line 191 OUT (&F9),A PUSH DE PUSH HL LD HL,exit.int ;set up vector to exit.int (which will LD (line.addr+1),HL ;set palette to black) POP HL EI HALT ;BC = &00f8 (clut0), and interrupt handler currently will ;set the palette to black, turning the white line off. ;The halt is necessary for the BORDER routine -- without it, the interrupt ;cannot be synchronised properly. ;When an interrupt occurs, it may interrupt in ANY instruction, but it isn't ;vectored to until the end of the current instruction (or current time round ;the loop in automatic loads/compares/IO). This means that there may be ;anything from 0 to 13 T-States difference between the interrupt and the ;execution of the handler. the HALT ensures that this delay is ALWAYS 4 ;T-STATES. ;The routine below is where it gets fiddly. certain OPCODES are used merely ;to provide the right number of Tstates to align the picture in the border ;area of the screen. These are marked as SYNC line.int4: LD D,34 ;colour for this line LD A,R ;sync LD BC,215 ;sync soak.time.1: DEC BC ;sync LD A,B ;sync OR C ;sync JP NZ,soak.time.1 ;sync LD BC,&00F8 ;set palette register NOP ;sync NOP ;sync NOP ;sync NOP ;sync DEFB &ED,&71 ;sync DEFB &ED,&71 ;sync bar1.15: OUT (C),D ;self modifying -- opcode changed by ;later routine -- as are all the OUT(C),D NOP ;sync NOP ;sync NOP ;sync DEFB &ED,&71 ;out (c),0 -- turn this VUBAR line OFF bar2.15: OUT (C),D NOP;sync NOP;sync NOP;sync DEFB &ED,&71 ;turn vubar line off bar3.15: OUT (C),D NOP;sync NOP;sync NOP;sync DEFB &ED,&71 ;turn vubar line off LD B,11 ;sync DJNZ $ ;sync JR $+2 ;sync (JR $+2 is PERFECT for this. Also saves on NOP ;sync label space) LD D,35 ;colour for this line... DEFB &ED,&71 ;sync DEFB &ED,&71 ;sync bar1.14: OUT (C),D ;etc.. as above NOP NOP NOP DEFB &ED,&71 bar2.14: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.14: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,50 DEFB &ED,&71 DEFB &ED,&71 bar1.13: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.13: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.13: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,51 DEFB &ED,&71 DEFB &ED,&71 bar1.12: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.12: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.12: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,53 DEFB &ED,&71 DEFB &ED,&71 bar1.11: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.11: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.11: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,83 DEFB &ED,&71 DEFB &ED,&71 bar1.10: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.10: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.10: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,85 DEFB &ED,&71 DEFB &ED,&71 bar1.9: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.9: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.9: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,86 DEFB &ED,&71 DEFB &ED,&71 bar1.8: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.8: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.8: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,101 DEFB &ED,&71 DEFB &ED,&71 bar1.7: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.7: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.7: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,102 DEFB &ED,&71 DEFB &ED,&71 bar1.6: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.6: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.6: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,98 DEFB &ED,&71 DEFB &ED,&71 bar1.5: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.5: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.5: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,38 DEFB &ED,&71 DEFB &ED,&71 bar1.4: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.4: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.4: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,34 DEFB &ED,&71 DEFB &ED,&71 bar1.3: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.3: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.3: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,32 DEFB &ED,&71 DEFB &ED,&71 bar1.2: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.2: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.2: OUT (C),D NOP NOP NOP DEFB &ED,&71 LD B,11 DJNZ $ JR $+2 NOP LD D,2 DEFB &ED,&71 DEFB &ED,&71 bar1.1: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar2.1: OUT (C),D NOP NOP NOP DEFB &ED,&71 bar3.1: OUT (C),D NOP NOP NOP DEFB &ED,&71 PUSH HL LD HL,temppalette+15 ;set up palette for MODE 4 screen bit. LD BC,&10F8 ;also used to fade things in/out OTDR LD A,&6E ;page in MODE 4 screen OUT (&FC),A LD A,83 ;set up line interrupt to line 83 OUT (&F9),A LD HL,line.int1 ;reset line interrupt vector LD (line.addr+1),HL POP HL IN A,(&FB) ;put a text line on screen in the PUSH AF ;text area. PUSH HL LD A,13 OUT (&FB),A CALL put.text.line EI HALT ;wait for FRAME interrupt, and sync. DI LD A,R ;sync LD BC,691 ;sync soak.time.2: DEC BC ;sync LD A,B ;sync OR C ;sync JP NZ,soak.time.2 ;sync LD BC,&00F8 ;BC=CLUT0 NOP;sync NOP;sync NOP;sync frame.addr: JP frame.scroll1 ;which output routine to use -- frame.scroll2: CP (HL) ;sync by HALF a border pixel for smoother scrolling frame.scroll1: LD DE,&1800 ;colour scroll.line1: OUT (C),E ;23 borcels per line OUT (C),E ;(BORCEL= BORDER PIXEL) OUT (C),E ;modified by scroller routines.. OUT (C),E ;the opcodes themselves are scrolled!!! OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&1800 scroll.line2: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&1700 scroll.line3: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&1700 scroll.line4: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&1F00 scroll.line5: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&1F00 scroll.line6: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7100 scroll.line7: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7100 scroll.line8: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7900 scroll.line9: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7900 scroll.line10: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7700 scroll.line11: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7700 scroll.line12: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7F00 scroll.line13: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7F00 scroll.line14: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7700 scroll.line15: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E LD DE,&7700 scroll.line16: OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E OUT (C),E DEFB &ED,&71 ;Set border to black again LD A,3 OUT (&FB),A CALL set.vubars ;set up vubar data CALL scrolly ;scroll the scrolly! POP HL POP AF OUT (&FB),A POP DE POP BC POP AF EI ;finally exit this mammoth interrupt RET ;routine... set.vubars: LD A,(reg8) ;get volume... AND &0F LD HL,data.table1 ;set up data LD B,15 ;uses a table to point to the opcodes... set.1.loop: OR A JR Z,blank.rest1 DEC A LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL LD (HL),&51 ;set this opcode to OUT (C),D EX DE,HL DJNZ set.1.loop JP set.bar2 blank.rest1: LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL LD (HL),&71 ;set it to OUT (C),0 EX DE,HL DJNZ set.1.loop set.bar2: LD A,(rega) ;vubar 2 AND &0F LD HL,data.table2 LD B,15 set.2.loop: OR A JR Z,blank.rest2 DEC A LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL LD (HL),&51 EX DE,HL DJNZ set.2.loop JP set.bar3 blank.rest2: LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL LD (HL),&71 EX DE,HL DJNZ set.2.loop set.bar3: LD A,(reg9) ;vubar 3 AND &0F LD HL,data.table3 LD B,15 set.3.loop: OR A JR Z,blank.rest3 DEC A LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL LD (HL),&51 EX DE,HL DJNZ set.3.loop RET blank.rest3: LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL LD (HL),&71 EX DE,HL DJNZ set.3.loop RET data.table1: DEFW bar1.1+1,bar1.2+1,bar1.3+1,bar1.4+1 DEFW bar1.5+1,bar1.6+1,bar1.7+1,bar1.8+1 DEFW bar1.9+1,bar1.10+1,bar1.11+1,bar1.12+1 DEFW bar1.13+1,bar1.14+1,bar1.15+1 data.table2: DEFW bar2.1+1,bar2.2+1,bar2.3+1,bar2.4+1 DEFW bar2.5+1,bar2.6+1,bar2.7+1,bar2.8+1 DEFW bar2.9+1,bar2.10+1,bar2.11+1,bar2.12+1 DEFW bar2.13+1,bar2.14+1,bar2.15+1 data.table3: DEFW bar3.1+1,bar3.2+1,bar3.3+1,bar3.4+1 DEFW bar3.5+1,bar3.6+1,bar3.7+1,bar3.8+1 DEFW bar3.9+1,bar3.10+1,bar3.11+1,bar3.12+1 DEFW bar3.13+1,bar3.14+1,bar3.15+1 font: MDAT "SCPDUFONT" ;Border Scroller ;--------------- scrolly: scroll.cn1: LD A,2 DEC A LD (scroll.cn1+1),A JR Z,scroll.text LD HL,frame.scroll1 ;decide whether or not to delay by half LD (frame.addr+1),HL ;a pixel... RET scroll.text: LD HL,frame.scroll2 LD (frame.addr+1),HL LD A,2 LD (scroll.cn1+1),A LD DE,scroll.line1 ;scroll the opcodes for the BORDER scroll LD HL,scroll.line1+2 CALL scroll.scroll LD DE,scroll.line2 LD HL,scroll.line2+2 CALL scroll.scroll LD DE,scroll.line3 LD HL,scroll.line3+2 CALL scroll.scroll LD DE,scroll.line4 LD HL,scroll.line4+2 CALL scroll.scroll LD DE,scroll.line5 LD HL,scroll.line5+2 CALL scroll.scroll LD DE,scroll.line6 LD HL,scroll.line6+2 CALL scroll.scroll LD DE,scroll.line7 LD HL,scroll.line7+2 CALL scroll.scroll LD DE,scroll.line8 LD HL,scroll.line8+2 CALL scroll.scroll LD DE,scroll.line9 LD HL,scroll.line9+2 CALL scroll.scroll LD DE,scroll.line10 LD HL,scroll.line10+2 CALL scroll.scroll LD DE,scroll.line11 LD HL,scroll.line11+2 CALL scroll.scroll LD DE,scroll.line12 LD HL,scroll.line12+2 CALL scroll.scroll LD DE,scroll.line13 LD HL,scroll.line13+2 CALL scroll.scroll LD DE,scroll.line14 LD HL,scroll.line14+2 CALL scroll.scroll LD DE,scroll.line15 LD HL,scroll.line15+2 CALL scroll.scroll LD DE,scroll.line16 LD HL,scroll.line16+2 CALL scroll.scroll scroll.counter: LD A,1 ;see if current character finished DEC A ;being shifted to scroller... LD (scroll.counter+1),A LD L,A LD H,0 ADD HL,HL LD DE,scroll.table ;work out which one to do... ADD HL,DE LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) scroll.table: DEFW pos7,put.any,put.any,put.any,put.any,put.any DEFW put.any,put.any pos7: LD A,8 LD (scroll.counter+1),A message.pos: LD HL,message ;get character, point to it, copy it to mess.wrap: ;temporary buffer. LD A,(HL) CP 255 JR NZ,not.wrap LD HL,message JR mess.wrap not.wrap: INC HL LD (message.pos+1),HL LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL LD DE,font-256 ADD HL,DE LD DE,font.store LDI LDI LDI LDI LDI LDI LDI LDI put.any: LD HL,font.store LD A,&59 ;OUT (C),E RLC (HL) JR NC,blank.7 ;put an OUT (C),E (blank) or OUT (C),D ;(filled) at end of scrolling area. LD A,&51 blank.7: LD DE,scroll.line1+45 ;double it -- double height scrolly LD (DE),A LD DE,scroll.line2+45 LD (DE),A INC HL LD A,&59 RLC (HL) JR NC,blank.6 LD A,&51 blank.6: LD DE,scroll.line3+45 LD (DE),A LD DE,scroll.line4+45 LD (DE),A INC HL LD A,&59 RLC (HL) JR NC,blank.5 LD A,&51 blank.5: LD DE,scroll.line5+45 LD (DE),A LD DE,scroll.line6+45 LD (DE),A INC HL LD A,&59 RLC (HL) JR NC,blank.4 LD A,&51 blank.4: LD DE,scroll.line7+45 LD (DE),A LD DE,scroll.line8+45 LD (DE),A INC HL LD A,&59 ;OUT (C),E RLC (HL) JR NC,blank.3 LD A,&51 blank.3: LD DE,scroll.line9+45 LD (DE),A LD DE,scroll.line10+45 LD (DE),A INC HL LD A,&59 RLC (HL) JR NC,blank.2 LD A,&51 blank.2: LD DE,scroll.line11+45 LD (DE),A LD DE,scroll.line12+45 LD (DE),A INC HL LD A,&59 RLC (HL) JR NC,blank.1 LD A,&51 blank.1: LD DE,scroll.line13+45 LD (DE),A LD DE,scroll.line14+45 LD (DE),A INC HL LD A,&59 RLC (HL) JR NC,blank.0 LD A,&51 blank.0: LD DE,scroll.line15+45 LD (DE),A LD DE,scroll.line16+45 LD (DE),A RET font.store: DEFS 8 scroll.scroll: ;scroll the scroller. Unlooped for speed. LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI RET initialise: LD A,3 LD (scroll.cn1+1),A LD A,3 OUT (&FB),A XOR A CALL 49237 ;Reset tune to start. LD BC,&0FF8 pal.blank: DEFB &ED,&71 ;blank the palette DJNZ pal.blank DEFB &ED,&71 LD HL,temppalette ;set up temporary palette LD B,16 temp.blank: LD (HL),0 INC HL DJNZ temp.blank LD HL,ish6palette ;move the logo palette to the buffer CALL movecolours LD A,&6E ;page in mode 4 screen. OUT (&FC),A LD A,14 ;clear screen. OUT (&FB),A LD HL,&8000 LD DE,&8001 LD BC,&5FFF LD (HL),L LDIR LD HL,scpdu.logo ;Copy SCPDU logo to top of screen. LD DE,&8800 LD BC,6400 LDIR DEC A ;page in MODE 2 screen OUT (&FB),A LD HL,&8000 ;clear it LD DE,&8001 LD BC,&3ACF LD (HL),L LDIR CALL set.attribute ;set up the attribute map for the screen EI LD BC,100 ;wait a while, play music & fade in screen waiter.loop: LD A,1 IN A,(&F8) CP 88 JP NZ,waiter.loop PUSH BC LD A,3 OUT (&FB),A CALL &C000 ;call music & convert it CALL play.chip POP BC DEC BC LD A,B OR C JR NZ,waiter.loop CALL fadein LD A,1 ;let the text line printer work. LD (put.text.line+1),A LD A,14 OUT (&FB),A keyloop: LD A,1 ;wait for the scan to reach a certain place IN A,(&F8) ;before playing music. Stops things flickering CP 88 JR NZ,keyloop LD A,3 OUT (&FB),A CALL &C000 ;call music & convert it CALL play.chip LD A,&7F ;check for space being pressed... IN A,(&FE) RRA JR C,keyloop LD A,1 LD (put.text.line+1),A JR keyloop reset.screen: MDAT "ish6res" scpdu.logo: MDAT "ys.lgo" attribute.data: DEFB %01000100,%01000101,%01000110,%01000111 DEFB %01000110,%01000101,%01000100,%01000011 set.attribute: LD HL,&AB40 ;set up grey scale for text. LD B,12 attr.loop: LD C,8 LD DE,attribute.data attr.loop3: LD A,32 attr.loop4: PUSH AF LD A,(DE) LD (HL),A INC HL POP AF DEC A JR NZ,attr.loop4 INC DE DEC C JR NZ,attr.loop3 DJNZ attr.loop RET put.text.line: ;actually put the text onscreen LD A,0 OR A RET Z ;is text output disabled? Yup, if zero. text.count: LD A,9 ;has last line of text been printed? DEC A LD (text.count+1),A JR NZ,not.new.line LD A,8 ;set up for new line LD (text.count+1),A XOR A ;set to top line of font LD (offset.font+1),A box.pos: LD HL,message.box LD DE,32 ADD HL,DE LD (box.pos+1),HL LD A,(HL) CP 128 JR Z,wrap.box ;end of text line? CP 255 JR NZ,not.new.line end.of.box: XOR A LD (put.text.line+1),A LD (offset.font+1),A INC HL LD (box.pos+1),HL LD HL,&8B40 LD (map.addr+1),HL LD A,9 LD (text.count+1),A RET wrap.box: LD HL,message.box-1 JR end.of.box not.new.line: LD HL,(box.pos+1) map.addr: LD DE,&8B40 LD B,32 line.map: PUSH HL LD L,(HL) LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL PUSH DE LD DE,font-256 ADD HL,DE offset.font: LD DE,0 ADD HL,DE LD A,(HL) POP DE LD (DE),A INC DE POP HL INC HL DJNZ line.map LD A,(offset.font+1) INC A LD (offset.font+1),A LD (map.addr+1),DE RET message.box: ; -------------------------------- DEFM " " DEFM " THIS DEMO IS 1992 " DEFM " " DEFM " SAM COUPE PUBLIC DOMAIN UPDATE " DEFM " " DEFM " @NTROPY " DEFM " " DEFM " AND YOUR SINCLAIR " DEFM " " DEFM " " DEFM " PRESS SPACE TO CHANGE PAGE " DEFM " " DEFB 255 DEFM "SAM COUPE PUBLIC DOMAIN UPDATE" DEFM "IS THE ONLY MAGAZINE DEVOTED TO" DEFM "PUBLIC DOMAIN AND IN EACH ISSUE" DEFM "YOU WOULD EXPECT TO FIND A FULL" DEFM "LIST OF EVERY DISK IN PUBLIC" DEFM "DOMAIN. ISSUE 6 WILL BE A DOUBLE" DEFM "DISK ISSUE!!!! " DEFM " " DEFM "ALONG WITH THE FULL COLOUR STYLE" DEFM "DATABASE LIST YOU WOULD EXPECT" DEFM "TO FIND DEMOS, SCREENS,ARTICLES," DEFM "REVIEWS,HOROSCOPES AND VIZ STYLE" DEFB 255 DEFM "LETTERS AND NOT FORGETTING SAM" DEFM "AND PD NEWS. " DEFM " " DEFM "BUT THAT'S NOT ALL: ON THE FREE" DEFM "DISC -GIVEN AWAY- WITH ISSUE 6," DEFM "YOU'LL FIND POSSIBLY THE BEST" DEFM "GIVEAWAY *EVER* SEEN IN THE SAM" DEFM "WORLD YET... " DEFM " " DEFM "WHAT AM I TALKING ABOUT? NOTHING" DEFM "REALLY, EXCEPT THE AMAZING NEW" DEFM "MEGADEMO BY @NTROPY!!! " DEFB 255 DEFM " ---STATUES OF ICE--- " DEFM " " DEFM "STATUES OF ICE IS THE NAME, AND" DEFM "IT WILL PACK A DISC TO THE BRIM," DEFM "FULL OF TECHNICAL MARVELS THAT" DEFM "WILL MAKE YOUR SAM POSITIVELY" DEFM "CRY OUT FOR MORE! FEATURING ALL" DEFM "NEW PROGRAMMING TECHNIQUES (LIKE" DEFM "THE BORDER SCROLLING IN THIS" DEFM "DEMO, FOR EXAMPLE) AND SAMPLED" DEFM "SOUND, AS WELL AS E - TRACKER" DEFM "MUSIC... CAN YOU WAIT FOR IT????" DEFB 255 DEFM " ---STATUES OF ICE--- " DEFM " " DEFM "NOT ONLY DOES SCPDU 6 HAVE THE" DEFM "FIRST EVER -TRUE- SAM MEGADEMO," DEFM "BUT IT ALSO HAS POSSIBLY ONE OF" DEFM "THE LARGEST SCROLLIES EVER SEEN" DEFM "ONE THE SAM (WE'RE TALKING BOTH" DEFM "SCREEN SIZE AND TEXT LENGTH!!!)" DEFM " " DEFM "ALL THIS, AND A FREE -ASTEROIDS-" DEFM "GAME, AS WELL AS A CONTACT AND" DEFM "CHAT SECTION (THE MESSAGE BOX)" DEFB 255 DEFM " ---STATUES OF ICE--- " DEFM " " DEFM "ALL MAKE THIS POSSIBLY ONE OF" DEFM "THE BEST EVER DEMO DEVELOPMENTS" DEFM "ON THE SAM YET... " DEFM " " DEFM "STATUES OF ICE IS PD TOO, SO YOU" DEFM "CAN COPY IT ABOUT - BUT TO DO SO" DEFM "YOU'LL HAVE TO USE THE BUILT IN" DEFM "COPIER, WHICH SUPPORTS THE MEG" DEFM "AS WELL... HAVE @NTROPY DONE" DEFM "WELL? WE THINK THAT THEY HAVE!!!" DEFB 255 DEFM " ---SCPDU ISSUE 5--- " DEFM " " DEFM "SO, YOUR APPETITES HAVE BEEN WET" DEFM "FOR ISSUE 6 OF SCPDU - HOW ABOUT" DEFM "ISSUE 5? FEATURING ABSOLUTELY" DEFM "LOADS OF AMAZING STUFF - THE" DEFM "FIRST PD AMIGA IFF CONVERTOR IS" DEFM "ONE OF THESE... AS WELL AS @NTRO" DEFM "2, AND A SLIDESHOW PROGRAMMED BY" DEFM "@NTROPY WHICH PLAYS MUSIC AND" DEFM "HAS A SCROLLY AT THE SAME TIME" DEFM "AS IT DECOMPRESSES IT'S SCREENS." DEFB 255 DEFM " ---SCPDU ISSUE 5--- " DEFM " " DEFM "IAN 'AXE' SLAVIN'S NEW CHARACTER" DEFM "CREATION - POTTER - IN THE FIRST" DEFM "INSTALLMENT OF HIS ONGOING" DEFM "SAGA OF HOW TO DO THINGS THE" DEFM "POTTER WAY... MORE STUFF THAN WE" DEFM "CAN MENTION HERE (COOKIE HAS NOT" DEFM "LEFT MUCH MEMORY AVAILABLE FOR" DEFM "THIS TEXT) AND ALL FOR `1.50!!!!" DEFM " " DEFM " " DEFB 255 DEFM " ---SCPDU--- " DEFM " " DEFM "SCPDU COSTS `1.50 PER ISSUE," DEFM "WITH EVERY SECOND ISSUE HAVING A" DEFM "FREE EXTRA DEMO DISC. " DEFM " " DEFM "SCPDU IS AVAILABLE FROM: " DEFM " " DEFM "SCPDU, GARAGE FLAT, RUDGE LANE," DEFM "OARE, NR. MARLBOROUGH, WILTS.," DEFM "SN8 4JQ. CHEQUES MADE PAYABLE TO" DEFM "SCPDU. " DEFB 255 DEFM " ---SCPDU SUBS--- " DEFM " " DEFM "AN SCPDU SUBSCRIPTION WILL BRING" DEFM "YOU: THE STANDARD 6 ISSUES PER " DEFM " YEAR (6,8,10 BEING DOUBLE " DEFM " ISSUES) " DEFM " " DEFM "BUT: " DEFM " " DEFM "YOU ACTUALLY GET THE TWO ISSUES" DEFM "AFTER THAT FREE, ONE BEING A" DEFM "DOUBLE DISC ISSUE. " DEFB 255 DEFM " ---SCPDU SUBS--- " DEFM " " DEFM "ALL THIS, FOR JUST `8.00, WHICH" DEFM "IS `1 OFF THE ACTUAL YEAR'S SUB," DEFM "PLUS THE TWO ISSUES FREE. " DEFM " " DEFM "CHEQUES AGAIN MADE PAYABLE TO" DEFM "SCPDU... " DEFM " " DEFM "THE FIRST ENVELOPE THAT I OPEN" DEFM "FOR AN ORDER FOR ISSUE 6 WILL" DEFM "GET ISSUE 6 FREE, PLUS ISSUES" DEFB 255 DEFM " ---SCPDU SUBS--- " DEFM " " DEFM "0 TO 5 OF SCPDU... " DEFM " " DEFM "PLEASE NOTE: " DEFM " " DEFM "THIS OFFER IS ONLY OPEN TO FIRST" DEFM "TIME READERS OF SCPDU. " DEFM " " DEFM "IF YOU WIN, YOU WILL BE SENT" DEFM "ISSUES 0 TO 6, PLUS YOUR CHEQUE" DEFM "BACK AS WELL. " DEFB 255 DEFM "CREDITS FOR THIS ADVERT/DEMO GO" DEFM "TO: " DEFM " " DEFM "COOKIE OF @NTROPY: CODING, GFX. " DEFM " ETC. " DEFM " " DEFM "JUSTIN ASH: INFO TEXT " DEFM " " DEFM "MUSIC CONVERTED FROM THE 128K" DEFM "SPECTRUM GAME: AUF WIEDERSEHEN " DEFM " MONTY. " DEFM " " DEFB 128 message: DEFM " " DEFM " WELCOME TO THE SCPDU 6 DE" DEFM "MO FOR YOUR SINCLAIR, WRITTEN BY THE NEW " DEFM "SPEC TEC!!!!!! " DEFM "WOW! THE FIRST EVER TIME THE BORDER HAS BE" DEFM "EN USED FOR VUBARS AND A SCROLLY IN A DEMO" DEFM "! ANOTHER FIRST BROUGHT TO YOU BY " DEFM "@NTROPY....... BACK TO THE IMPORTANT STUFF" DEFM " THOUGH -" DEFM " CREDITS: CODING AND GRAPHICS BY COOKIE" DEFM " OF YOUR SINCLAIR (!) AND " DEFM "@NTROPY... MUSIC BY BEN DAGLISH, " DEFM "FROM AUF WIEDERSEHEN MONTY... " DEFM "INFO BY JUSTIN ASH (EDITOR OF SCPDU)... " DEFM " NOT BEING IN THIS SCROLLY AT ALL BY" DEFM " NICAM OF @NTROPY, SCPDU ADDRESS: " DEFM "GARAGE FLAT, RUDGE LANE, OARE, NR. MARLBO" DEFM "ROUGH, SN8 4JQ........ AND AGAIN? WHY " DEFM "NOT? .... SCPDU, " DEFM "GARAGE FLAT, RUDGE LANE, OARE, NR. MARLBO" DEFM "ROUGH, SN8 4JQ........ @NTROPY " DEFM "CONTACT ADDRESS (COOKIE): " DEFM "18 BRAEMAR DRIVE, SALE, CHESHIRE, M33 4NJ " DEFM " (I'LL REPEAT THAT:) " DEFM "18 BRAEMAR DRIVE, SALE, CHESHIRE, M33 4NJ " DEFM " @NTROPY CONTACT ADDRESS (NICAM): " DEFM "28 MANOR AVE., SALE, CHESHIRE, M33 4PQ " DEFM " (I'LL REPEAT THAT TOO:) " DEFM "28 MANOR AVE., SALE, CHESHIRE, M33 4PQ " DEFM " NICAM CAN ANSWER ANYTHING " DEFM "VAGUELY AMIGERY IF YOU PHONE HIM, AND HE " DEFM "CAN TELL YOU A LOT MORE BESIDES... PHONE H" DEFM "IM ON: (061) 969 2829 (UK) " DEFM "AT ANY TIME... (ANSWERPHONE IF HE'S ASLEEP" DEFM "! DON'T BE WORRIED IF YOU HEAR T" DEFM "HE ANSWERPHONE SAY ANYTHING FROM ANY OLD " DEFM "KIDS PROGRAM - HE'S GOING THROUGH ONE OF T" DEFM "HOSE PHASES! ALSO, HE OFTEN AN" DEFM "SWERS THE PHONE WITH " DEFB 34 DEFM "TRUMPTON FIRE STATION, BARNEY McGREW SPEAK" DEFM "ING" DEFB 34 DEFM ", SO NOW YOU KNOW IT'S REALLY HIM YOU'LL B" DEFM "E TALKING TO!!! " DEFM "ENTROPY ---DESPERATELY--- NEEDS AN EXCELLE" DEFM "NT GRAPHICS ARTIST... NAMELY BECAUSE I CAN" DEFM "'T BE BOTHERED, AS IT TAKES ENOUGH " DEFM "TIME CODING THE DAMN DEMOS, WITHOUT ME HA" DEFM "VING TO DRAW EVERYTHING IN THEM, AND GRAB " DEFM "128K MUSIC TO CONVERT (OR TREAD LIGHTLY " DEFM "IN THE DANGEROUS AREA OF USING E-COMPILE V" DEFM "1.0 TO USE E-TRACKER TUNES!) SO" DEFM ", IF YOU THINK YOU FIT THE BILL, " DEFM "THEN SEND US A WHOLE DISC (OR " DEFM "TWO) FULL OF YOUR ARTWORK... SEND IT TO " DEFM "THE COOKIE ADDRESS - BECAUSE NICAM HASN'T " DEFM "GOT A SAM YET... (SHOCK HORROR!)... " DEFM " A PITY ABOUT SAMCO DYING WASN'T IT... BUT" DEFM " IF YOU WANT TO HEAR THE -TRUE- STORY BEH" DEFM "IND SAMCO'S DEMISE, READ ISSUE 5 OF SCPDU'" DEFM "S -PENSTONE- COLUMN.... I'M SURE YOU'LL " DEFM "FIND IT INTERESTING READING. " DEFM "TIME TO GO NOW, BECAUSE I DON'T WANT TO US" DEFM "E UP ALL OF THE MEMORY THAT JUSTIN " DEFM "NEEDS TO TELL YOU ABOUT ISSUE 6 OF SCPDU. " DEFM " THIS WAS COOKIE ON THE SCROLL, " DEFM "AND THIS DEMO IS (C) 1992 @NTROPY AND YOUR S" DEFM "INCLAIR... " DEFM " GREETZ GO OUT TO: " DEFM "CID, " DEFM "NICAM, MIKE AJ, J.ASH, DR.H, MIKEY-BOY, " DEFM "RAINMAN, BRUCE GORDON, ALAN MILES, " DEFM "ALL OF THE SAMCO TEAM, MARK AND PAUL DOWN" DEFM "STAIRS AT SAMTECH, THE DVB, SAMMY B, MATT " DEFM "COLLINGE, DAN DOORE, THORSTEN GUDMUNSEN, " DEFM "DAVID GOMMEREN, KRONUS, GAZ JAYNE (BOTH OF" DEFM " ECLIPSE), ANDY M, COLIN MACD, BAZ McC, " DEFM "GRAHAM BURTENSHAW, ANDY MONK, WIZARD, STEP" DEFM "HEN WILSON, HOWARD PRICE (HOW ABOUT A LETT" DEFM "ER - NOT A CHAIN LETTER THIS TIME THOUGH?!" DEFM "), PAT SPENCER, IAN SLAVIN, MACIEJ WOLOSYK" DEFM " (ESI)............. WRAP THIS NOWHERE THIN" DEFM "G!" DEFB 255 ish6palette: DEFB 0,17,25,29,89,34,38,98,0,8,7,15,112,120,119 DEFB 127 fadein: LD B,9 LD D,8 fadein1: LD C,16 LD HL,palette EXX LD HL,temppalette EXX fadein2: PUSH DE LD A,(HL) INC D DEC D JP Z,nofadein fadein3: PUSH DE CALL dropdown POP DE DEC D JP NZ,fadein3 nofadein: INC HL EXX LD (HL),A INC HL EXX POP DE DEC C JP NZ,fadein2 EXX LD B,4 fadeinfly: LD A,1 IN A,(&F8) CP 185 JP NZ,fadeinfly PUSH HL PUSH BC PUSH DE LD A,3 OUT (&FB),A CALL &C000 CALL play.chip POP DE POP BC POP HL DJNZ fadeinfly EXX DEC D DJNZ fadein1 RET dropdown: OR A RET Z XOR 8 BIT 3,A RET Z dropblue: LD D,A AND 17 JP NZ,nextdown1 LD A,D JP dropred nextdown1: AND 1 JP Z,drophighblue LD A,D AND 126 JP dropred drophighblue: LD A,D AND 111 OR 1 dropred: LD D,A AND 34 JP NZ,nextdown2 LD A,D JP dropgreen nextdown2: AND 2 JP Z,drophighred LD A,D AND 125 JP dropgreen drophighred: LD A,D AND 127-32 OR 2 dropgreen: LD D,A AND 68 JP NZ,nextdown3 LD A,D RET nextdown3: AND 4 JP Z,drophighgreen LD A,D AND 123 RET drophighgreen: LD A,D AND 63 OR 4 RET movecolours: LD DE,palette LD BC,16 LDIR RET palette: DEFS 16 temppalette: DEFS 16 end.so.far: ;MUSIC CONVERSION CODE ;~~~~~~~~~~~~~~~~~~~~~ ORG &8000 DUMP 3,0 JP setrega ORG &8018 DUMP 3,24 JP outrege setrega: PUSH AF PUSH DE PUSH BC PUSH HL AND &0F LD L,A LD H,0 LD DE,reg ADD HL,DE LD (register),HL POP HL POP BC POP DE POP AF RET outrege: PUSH AF PUSH DE PUSH BC PUSH HL LD HL,(register) LD (HL),E POP HL POP BC POP DE POP AF RET ;************* PLAY DATA THROUGH SAM SOUND CHIP **************** play.chip: LD BC,&01FF LD A,28 OUT (C),A LD A,B DEC B OUT (C),A LD HL,reg LD C,255 LD E,(HL) INC HL LD D,(HL) LD A,(reg+7) AND 8 LD A,(reg+8) LD B,A JR Z,p1 LD A,D OR E LD A,B JR NZ,p1 XOR A p1: LD (data+1),A INC HL PUSH HL EX DE,HL LD DE,freq.table ADD HL,HL ADD HL,DE LD A,10 LD B,1 OUT (C),A LD A,(HL) LD B,0 OUT (C),A INC HL LD A,(HL) LD (data),A POP HL LD E,(HL) INC HL LD D,(HL) LD A,(reg+7) AND 16 LD A,(reg+9) LD B,A JR Z,p2 LD A,E OR D LD A,B JR NZ,p2 XOR A p2: LD (data+2),A INC HL PUSH HL EX DE,HL LD DE,freq.table ADD HL,HL ADD HL,DE LD A,11 LD B,1 OUT (C),A LD A,(HL) LD B,0 OUT (C),A INC HL LD B,1 LD A,17 OUT (C),A LD A,(HL) ADD A,A ADD A,A ADD A,A ADD A,A LD B,A LD A,(data) OR B LD B,0 OUT (C),A POP HL LD E,(HL) INC HL LD D,(HL) LD A,(reg+7) AND 32 LD A,(reg+10) LD B,A JR Z,p3 LD A,E OR D LD A,B JR NZ,p3 XOR A p3: LD (data+3),A INC HL PUSH HL EX DE,HL LD DE,freq.table ADD HL,HL ADD HL,DE LD A,13 LD B,1 OUT (C),A LD A,(HL) LD B,0 OUT (C),A INC HL LD A,(HL) ADD A,A ADD A,A ADD A,A ADD A,A LD (data),A POP HL LD B,1 LD A,22 OUT (C),A LD A,(HL) AND 31 SUB 7 JP NC,p4 XOR A JP p5 p4: SUB 10 JP NC,p6 LD A,17 JP p5 p6: LD A,34 p5: LD B,0 OUT (C),A INC HL LD B,1 LD DE,0 LD A,(HL) BIT 0,A JP NZ,p7 SET 2,D p7: BIT 3,A JP NZ,p8 SET 2,E p8: BIT 1,A JP NZ,p9 SET 3,D p9: BIT 4,A JP NZ,p10 SET 3,E p10: BIT 2,A JP NZ,p11 SET 5,D p11: BIT 5,A JP NZ,p12 SET 5,E p12: LD A,20 OUT (C),A LD B,0 OUT (C),D INC A LD B,1 OUT (C),A LD B,0 OUT (C),E LD A,(data+1) AND 240 LD D,A JP NZ,p13 LD A,24 LD B,1 OUT (C),A LD B,0 OUT (C),B p13: LD A,(data+3) AND 240 LD E,A JP NZ,p14 LD A,25 LD B,1 OUT (C),A LD B,0 OUT (C),B p14: LD A,E OR D CALL NZ,set.envelope LD B,1 LD A,2 OUT (C),A LD A,(data+1) LD B,A SUB 16 JR C,p15 LD B,15 p15: LD A,B ADD A,A ADD A,A ADD A,A ADD A,A OR B LD B,0 OUT (C),A LD B,1 LD A,3 OUT (C),A LD A,(data+2) AND 15 SRL A LD B,A ADD A,A ADD A,A ADD A,A ADD A,A OR B LD B,0 OUT (C),A LD B,1 LD A,5 OUT (C),A LD A,(data+3) LD B,A SUB 16 JR C,p16 LD B,15 p16: LD A,B ADD A,A ADD A,A ADD A,A ADD A,A OR B LD B,0 OUT (C),A LD B,1 LD A,18 OUT (C),A LD A,(data) LD B,0 OUT (C),A RET set.envelope: LD A,(reg+13) AND 15 PUSH HL PUSH DE LD HL,data+4 LD D,0 LD E,A ADD HL,DE LD A,(HL) POP HL LD D,A LD A,H AND A JP Z,p17 LD A,24 LD B,1 OUT (C),A LD B,0 OUT (C),D p17: LD A,L AND A JP Z,p18 LD A,25 LD B,1 OUT (C),A LD B,0 OUT (C),D p18: LD HL,(reg+11) LD DE,freq.table ADD HL,HL ADD HL,DE LD A,(HL) LD D,A LD A,9 LD B,1 OUT (C),A LD B,0 OUT (C),D LD A,12 LD B,1 OUT (C),A LD B,0 OUT (C),D INC HL LD A,(HL) LD A,(data) OR D LD (data),A LD A,D ADD A,A ADD A,A ADD A,A ADD A,A LD D,A LD B,1 LD A,16 OUT (C),A LD B,0 OUT (C),D POP HL RET register: DEFW 0 data: DEFB 0,0,0,0 DEFB 132,132,132,132,140,140,140,140 DEFB 134,132,138,130,142,130,138,140 reg: reg0: DEFB 0 reg1: DEFB 0 reg2: DEFB 0 reg3: DEFB 0 reg4: DEFB 0 reg5: DEFB 0 reg6: DEFB 0 reg7: DEFB 0 reg8: DEFB 0 reg9: DEFB 0 rega: DEFB 0 regb: DEFB 0 regc: DEFB 0 regd: DEFB 0 DEFW 0 ;to pad out the registers so that ;there's 16 of them freq.table: MDAT "frequency" ;Modify 128k Music code ORG 49220 DUMP 4,68 CALL setrega CALL outrege NOP NOP NOP