;Menu for issue 14 of FRED Disc Magazine ;--------------------------------------- ;(c) 1991 Simon Cooke ;Displays a revolving set of 3 large color bars, with a scrolly ;underneath. ;Very old -- one of the first routines I wrote on the SAM, written with ;LERM assembler too, which was a pile of steaming turd. ORG 32768 LineColour: EQU 0 DI IN A,(250) LD (StoreLower),A LD (StoreSP),SP LD HL,Message LD (MessPosition+32768),HL XOR A LD (Point+32768),A LD A,33;Page 1:32768 OUT (250),A LD SP,32768 JP JumpLeader LastBusHome: DI LD SP,(StoreSP) LD A,(StoreLower) OUT (250),A EI RET StoreSP: DEFW 0 StoreLower: DEFB 0 ORG &38 DUMP 32768+&38 Mode1Interrupt:PUSH AF PUSH DE PUSH BC PUSH HL IN A,(249) RRA JP NC,LineInt RRA JP NC,MouseInt RRA RRA JP NC,FrameInt Exit: POP HL POP BC POP DE POP AF EI RET ORG &66 DUMP 32768+&66 NMIinterrupt: RETN FrameInt: LD A,(LineTableQ) OR A JR Z,NonSequitar LD HL,LineTwo JR OnLine NonSequitar: LD HL,LineOne OnLine: XOR A OUT (249),A LD (Line),A LD (LinePointer),HL LD A,1 LD (InterruptFlag),A JP Exit LineInt: LD A,(Line) LD D,A LD BC,504 IN A,(254) AND 32 JR NZ,PenStrobe WaitHPEN: IN A,(C) CP D JR Z,WaitHPEN PenStrobe: LD HL,(LinePointer) LD B,LineColour LD A,(HL) OUT (C),A INC HL LD (LinePointer),HL LD A,(Line) INC A INC A CP 162 JR NZ,purfect LD A,192 purfect: OUT (249),A LD (Line),A JP Exit LinePointer: DEFW LineOne LineTableQ: DEFB 255 Palette: DEFB 0,8,7,15,112,120,119,126,107,99,36,10 DEFB 25,31,121,127 BackScreen: DEFB 12 LineOne: DEFB 0,0,0,0,0,0 DEFS 82-5 LineTwo: DEFB 0,0,0,0,0,0 DEFS 82-5 MouseInt: PUSH DE LD BC,65534 IN A,(C) LD HL,MouseData LD DE,1807 IN A,(C) AND E CP E JR Z,MouseRead POP DE JP Exit MouseRead: LD (HL),A INC HL IN A,(C) DEC D JR NZ,MouseRead LD (HL),A LD HL,MouseButton LD A,(HL) CPL AND 7 LD (HL),A INC HL INC HL LD A,(HL) INC HL AND E RLCA RLCA RLCA RLCA LD D,A LD A,(HL) AND E OR D LD D,A LD A,(PointerY) ADD A,D CP 192 JR C,NotDroppedOff XOR A BIT 7,D JR NZ,NotDroppedOff LD A,191 NotDroppedOff: LD (PointerY),A INC HL INC HL LD A,(HL) INC HL RLCA RLCA RLCA RLCA LD D,A LD A,(HL) AND E OR D LD E,A RLA SBC A,A LD D,A LD HL,(PointerX) ADD HL,DE LD B,2 LD A,H INC A JR Z,LowMouse CP B JR Z,LowTwo LD H,B DEC H DEC H LD L,255 LowTwo: LD (PointerX),HL POP DE JP Exit LowMouse: LD HL,0 LD (PointerX),HL POP DE JP Exit MouseData: DEFB 0 MouseButton: DEFB 0 DEFS 6 PointerX: DEFW 0 PointerY: DEFB 0 InterruptFlag: DEFB 0 Line: DEFB 0 REDbar: DEFB 34,42,39,47,114,47,39,42,34,32,2,0,2 DEFB 32,34,32 GREENbar: DEFB 68,76,71,79,116,79,71,76,68,64,4,0,4 DEFB 64,68,64 BLUEbar: DEFB 17,25,23,31,113,31,23,25,17,16,1,0,1 DEFB 16,17,16 FREDlogo: DEFS 1856 Bar1Pos: DEFW BarRotation Bar2Pos: DEFW BarRotation+21 Bar3Pos: DEFW BarRotation+42 Bar1Depth: DEFW BarRotation+32 Bar2Depth: DEFW BarRotation+53 Bar3Depth: DEFW BarRotation+10 ChromeFont: DEFS 4416 DEFS 76 BarRotation: DEFS 64 JumpLeader: EI LD A,14 OUT (251),A OR 96 OUT (252),A LD HL,32768 LD DE,32769 LD (HL),L LD BC,8191 LDIR LD HL,Palette+15 LD B,16 LD C,248 OTDR LD DE,35874 LD HL,FREDlogo LD B,32 WidthLoop: LD C,58 PUSH DE Width2: LD A,(HL) INC HL LD (DE),A INC DE DEC C JR NZ,Width2 POP DE PUSH HL LD HL,128 ADD HL,DE EX DE,HL POP HL DJNZ WidthLoop ContinueLeap: LD A,(LineTableQ) OR A JR NZ,LineOn LD HL,LineTwo JR On LineOn: LD HL,LineOne On: LD B,81 ClearLineL: LD (HL),0 INC HL DJNZ ClearLineL CALL PlaceBars LD HL,(Bar1Pos) INC L LD A,L AND 63 LD L,A LD (Bar1Pos),HL LD HL,(Bar2Pos) INC L LD A,L AND 63 LD L,A LD (Bar2Pos),HL LD HL,(Bar3Pos) INC L LD A,L AND 63 LD L,A LD (Bar3Pos),HL LD HL,(Bar1Depth) INC L LD A,L AND 63 LD L,A LD (Bar1Depth),HL LD HL,(Bar2Depth) INC L LD A,L AND 63 LD L,A LD (Bar2Depth),HL LD HL,(Bar3Depth) INC L LD A,L AND 63 LD L,A LD (Bar3Depth),HL LD A,(LineTableQ) CPL LD (LineTableQ),A XOR A LD (InterruptFlag),A WaitForIT: HALT LD A,(InterruptFlag) OR A JR Z,WaitForIT CALL Scrolly LD BC,64510 IN A,(C) CPL AND 4 LD D,A LD BC,57342 IN A,(C) CPL AND 4 OR D LD D,A LD BC,65022 IN A,(C) CPL AND 29 OR D LD D,A LD BC,49150 IN A,(C) CPL AND 30 OR D LD D,A LD BC,32766 IN A,(C) CPL AND 28 OR D LD D,A LD BC,65278 IN A,(C) CPL AND 8 OR D JP Z,ContinueLeap DI LD A,1 OUT (251),A JP LastBusHome JP ContinueLeap ;ScrollyEtc : Rest of routine - Putting pointer on screen XOR A LD (InterruptFlag),A ; Scrolly,Key detect, options wobbling ; are all done from this address. PlaceRED: LD HL,(Bar1Pos) LD A,(HL) LD E,A LD D,0 LD A,(LineTableQ) OR A JR NZ,Lino LD HL,LineTwo JR On2 Lino: LD HL,LineOne On2: ADD HL,DE LD DE,REDbar LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A RET ; ONLY RED BAR DONE!!! PlaceGREEN: LD HL,(Bar2Pos) LD A,(HL) LD E,A LD D,0 LD A,(LineTableQ) OR A JR NZ,Lino2 LD HL,LineTwo JR On3 Lino2: LD HL,LineOne On3: ADD HL,DE LD DE,GREENbar LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A RET PlaceBLUE: LD HL,(Bar3Pos) LD A,(HL) LD E,A LD D,0 LD A,(LineTableQ) OR A JR NZ,Lino3 LD HL,LineTwo JR On4 Lino3: LD HL,LineOne On4: ADD HL,DE LD DE,BLUEbar LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A INC HL INC DE LD A,(DE) LD (HL),A RET PlaceBars: LD HL,(Bar1Depth) LD B,(HL) LD HL,(Bar2Depth) LD C,(HL) LD HL,(Bar3Depth) LD A,(HL) CP B JR C,BGREATERA CP C JR C,CGREATERA LD HL,PlaceRED PUSH HL LD A,B CP C JR C,CGREATERB1 LD HL,PlaceGREEN PUSH HL LD HL,PlaceBLUE PUSH HL RET CGREATERB1: LD HL,PlaceBLUE PUSH HL LD HL,PlaceGREEN PUSH HL RET BGREATERA: CP C JR C,BCGREATERA LD HL,PlaceGREEN PUSH HL LD HL,PlaceRED PUSH HL LD HL,PlaceBLUE PUSH HL RET BCGREATERA: LD A,B CP C JR C,CGREATERB2 LD HL,PlaceGREEN PUSH HL LD HL,PlaceBLUE PUSH HL LD HL,PlaceRED PUSH HL RET CGREATERB2: LD HL,PlaceBLUE PUSH HL LD HL,PlaceGREEN PUSH HL LD HL,PlaceRED PUSH HL RET CGREATERA: LD HL,PlaceBLUE PUSH HL LD HL,PlaceRED PUSH HL LD HL,PlaceGREEN PUSH HL RET Scrolly: LD HL,55329 LD DE,55328 LD BC,63 LDIR LD HL,55457 LD DE,55456 LD BC,63 LDIR LD HL,55585 LD DE,55584 LD BC,63 LDIR LD HL,55713 LD DE,55712 LD BC,63 LDIR LD HL,55841 LD DE,55840 LD BC,63 LDIR LD HL,55969 LD DE,55968 LD BC,63 LDIR LD HL,56097 LD DE,56096 LD BC,63 LDIR LD HL,56225 LD DE,56224 LD BC,63 LDIR LD HL,56353 LD DE,56352 LD BC,63 LDIR LD HL,56481 LD DE,56480 LD BC,63 LDIR LD DE,56608 LD HL,56609 LD BC,63 LDIR LD DE,56736 LD HL,56737 LD BC,63 LDIR LD DE,56864 LD HL,56865 LD BC,63 LDIR LD DE,56992 LD HL,56993 LD BC,63 LDIR LD DE,57120 LD HL,57121 LD BC,63 LDIR LD DE,57248 LD HL,57249 LD BC,63 LDIR ScrollAlong: LD HL,(MessPosition) LD A,(HL) CP 255 JR NZ,NotRes LD HL,Message LD (MessPosition),HL JP ScrollAlong NotRes: SUB 32 LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL LD DE,ChromeFont ADD HL,DE EX DE,HL LD A,(Point) LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,DE PUSH HL POP BC LD HL,55391 LD A,(BC) LD (HL),A INC BC LD DE,128 ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A INC BC ADD HL,DE LD A,(BC) LD (HL),A LD A,(Point) INC A LD (Point),A CP 4 RET NZ XOR A LD (Point),A LD HL,(MessPosition) INC HL LD (MessPosition),HL RET Point: DEFB 0 MessPosition: DEFW Message Message: DEFB 0 END: EQU $