├── LICENCE.md ├── super-robin-hood-nes-source-code ├── DATA2 ├── DATA3 ├── BEDCHR.PP1 ├── BOXCHR.PP1 ├── CHRSET.PP1 ├── CMLOGO.OLD ├── CMLOGO.PP1 ├── DATA.MUS ├── OKCHR.CHR ├── OKCHR.PP1 ├── ROBINV7.BC ├── ROBINV7.BD ├── ROBINV7.BE ├── ROBINV7.BF ├── ARCHCHR.PP1 ├── BASECHR.PP1 ├── BEADCHR.PP1 ├── BOTCHRS.PP1 ├── DOORCHR.PP1 ├── HEX2BIN.COM ├── HISCORE.PP1 ├── PP1PACK.EXE ├── ROBINCHR.PP1 ├── ROCKCHR.PP1 ├── SOLIDCHR.PP1 ├── TOPCHRS.PP1 ├── CM_CHARS ├── BANK12.PDS ├── BANK8.PDS ├── BANK13.PDS ├── BANK14.PDS ├── RIP.CHR ├── ENDCODE.ROU ├── CHRSETS.CHR ├── TIMINGS.ROU ├── ROBIN.PRJ ├── START.ROU ├── JUNK ├── REDEFCHR.ROU ├── INTERUPT.ROU ├── MAINLOOP.ROU ├── PRTMESS.ROU ├── PP1UNPAK ├── PRTROBIN.ROU ├── TITLE.ROU ├── MACROS.MUS ├── VARS.PDS ├── EXPLODE.ROU ├── SMILEY.ROU ├── UNPACK.ROU ├── GENERAL.ROU ├── JONSBIT.MUS ├── SPRITESD.DAT ├── HISCORE.ROU ├── SPRITESR.ROU ├── NEWBITS.ROU ├── MAPSCROL.ROU ├── XTRAROUS.ROU └── MACROS.PDS ├── source-code-marble-madness ├── images │ ├── map.png │ ├── marble.png │ ├── overlay.png │ └── height45.png └── marble.py └── README.md /LICENCE.md: -------------------------------------------------------------------------------- 1 | https://creativecommons.org/licenses/by-nc-sa/3.0/legalcode 2 | -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/DATA2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/DATA2 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/DATA3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/DATA3 -------------------------------------------------------------------------------- /source-code-marble-madness/images/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/source-code-marble-madness/images/map.png -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BEDCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/BEDCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BOXCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/BOXCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/CHRSET.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/CHRSET.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/CMLOGO.OLD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/CMLOGO.OLD -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/CMLOGO.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/CMLOGO.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/DATA.MUS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/DATA.MUS -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/OKCHR.CHR: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/OKCHR.CHR -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/OKCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/OKCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ROBINV7.BC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/ROBINV7.BC -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ROBINV7.BD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/ROBINV7.BD -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ROBINV7.BE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/ROBINV7.BE -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ROBINV7.BF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/ROBINV7.BF -------------------------------------------------------------------------------- /source-code-marble-madness/images/marble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/source-code-marble-madness/images/marble.png -------------------------------------------------------------------------------- /source-code-marble-madness/images/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/source-code-marble-madness/images/overlay.png -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ARCHCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/ARCHCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BASECHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/BASECHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BEADCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/BEADCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BOTCHRS.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/BOTCHRS.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/DOORCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/DOORCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/HEX2BIN.COM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/HEX2BIN.COM -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/HISCORE.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/HISCORE.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/PP1PACK.EXE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/PP1PACK.EXE -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ROBINCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/ROBINCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ROCKCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/ROCKCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/SOLIDCHR.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/SOLIDCHR.PP1 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/TOPCHRS.PP1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/super-robin-hood-nes-source-code/TOPCHRS.PP1 -------------------------------------------------------------------------------- /source-code-marble-madness/images/height45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wireframe-Magazine/Wireframe-34/HEAD/source-code-marble-madness/images/height45.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Wireframe-34 2 | Projects and assets from Wireframe #34 3 | 4 | Code a Marble Madness homage, pages 40-41, by Mark Vanstone 5 | 6 | Squeezing the NES, pages 30-35, by Philip and Andrew Oliver 7 | 8 | The code example is licenced under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported. 9 | -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/CM_CHARS: -------------------------------------------------------------------------------- 1 | CM_CHARACTERS 2 | 3 | LDA #$00 4 | STA $2006 5 | STA $2006 6 | LDX #CM_CHRSET&$FF 7 | LDY #CM_CHRSET/256 8 | LDA #BANK 9 | JMP PP1_DOWNLOAD3 10 | 11 | CM_CHRSET ;was 1598 bytes long 12 | ;now 1242 bytes long 13 | 14 | INCBIN C:\JON\CM\CMLOGO.PP1 15 | -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BANK12.PDS: -------------------------------------------------------------------------------- 1 | 2 | ED12 3 | b12 equ &c000-ED12 4 | free b12 5 | LIST ON 6 | BANK12 DEFB B12 ;maps and data 7 | LIST OFF 8 | 9 | 10 | endofbank12 if endofbank12>&c002 11 | error "game bank 12 overflowed 12 | endif 13 | 14 | bank 12 15 | 16 | org &8000 17 |  18 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BANK8.PDS: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ED8 5 | b8 equ ED8-&8000 6 | LIST ON 7 | BANK8 DEFB B8 ;overflow bank 8 | LIST OFF 9 |  10 | 11 | endofbank8 if endofbank8>&bfff 12 | error "game bank 8 overflowed 13 | endif 14 | 15 | bank 8 16 | 17 | org &8000 18 | 19 | 20 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BANK13.PDS: -------------------------------------------------------------------------------- 1 |  2 | ED13 3 | b13 equ &c000-ED13 4 | free b13 5 | LIST ON 6 | BANK13 DEFB B13 ;title/hiscore/music/soundfx 7 | LIST OFF 8 | 9 | 10 | endofbank13 if endofbank13>&c001 11 | error "game bank 13 overflowed 12 | endif 13 | 14 | bank 13 15 | org &8000 16 |  17 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/BANK14.PDS: -------------------------------------------------------------------------------- 1 | 2 | ED14 3 | b14 equ &BFFF-ED14 4 | free b14 5 | LIST ON 6 | BANK14 DEFB B14 ;general character sets 7 | LIST OFF 8 | 9 | endofbank14 if endofbank14>&c001 10 | error "game bank 14 overflowed 11 | endif 12 | 13 | bank 14 14 | org &c004 15 | jmp pastnops 16 | jmp cm_nmi 17 | 18 | 19 | bank_table 20 | banktable 21 | bank.tbl defb 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 22 | 23 | 24 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/RIP.CHR: -------------------------------------------------------------------------------- 1 | HEX 00E060606066FC000000000000000000 HEX 003C66F0C0C67C000000000000000000 HEX 007E3230FC6060000000000000000000 HEX 00FE9A18181830000000000000000000 HEX 713B3E3C3C3838380A40010200040000 HEX E0F83C1C1E0E0E0E1004402200100000 HEX 38383838383F3F380000000000000000 HEX 0E0E1C1C78F0C0000010022080002000 HEX 3838383838387CC60000000000440038 HEX 38383838383838380000000000000000 HEX 00606000000000006090906000000000 HEX 000000000000001C0000000000000020 HEX E0E0707038391F0E0000000000020010 -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/ENDCODE.ROU: -------------------------------------------------------------------------------- 1 | 2 | 3 | ED15 4 | b15 equ &fff9-ED15 5 | 6 | 7 | T EQU b12+b13+b14+b15 8 | 9 | LIST ON 10 | BANK15 DEFB B15 ;TOP BANK everything else 11 | TOTAL DEFB T 12 | LIST OFF 13 | 14 | 15 | endofcode 16 | if endofcode>&fff9 17 | error "main bank overflowed &fffa 18 | endif 19 | 20 | veryend 21 | org $fff9 22 | irqinterupt rti 23 | defw &C007 ;CM_NMI ;INTERUPT 24 | defw START 25 | defw IRQINTERUPT 26 | 27 | if master=0 28 | BANK 12,START 29 | else 30 | bank 12 31 | wipebanks = 0 32 | do 33 | org &8000 34 | defs &4000,0 35 | bank wipebanks 36 | wipebanks = wipebanks+1 37 | until wipebanks=12 38 | 39 | endif 40 | send computer1 41 | 42 | 43 | END 44 | 45 | 46 | 47 | 48 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/CHRSETS.CHR: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ;chrset for title screen 5 | ;0 space 6 | ;1-31 A-Z !?".: 7 | ;32 space dark blue 8 | ;33-42 0-9 9 | ;43-125 bmxlogo 10 | ;126-145 simluator 11 | ;146-181 codemasters 12 | ;182-201 camerica 13 | ;202-208 paddle 14 | ;209-220 large 1,2,3 15 | ;220- 16 | 17 | collisionchr hex 0e0080 ;0fff ; 18 | solidcollisionchr 19 | hex 0fff 20 | alphachrs 21 | hiscorechrs ;70 chrs at 0 22 | 23 | incbin hiscore.pp1 24 | 25 | ; incbin chrset.pp1 26 | ; 27 | ; hex 0f00 ;space 28 | ; HEX 873C7E667E66666600FF ;A 29 | ; HEX 877C7E667C66667C00FF ;B 30 | ; HEX 873C7E626060623C00FF ;C 31 | ; HEX 877C7E666666667C00FF ;D 32 | ; HEX 877E7E607C60607E00FF ;E 33 | ; HEX 877E7E607C60606000FF ;F 34 | ; HEX 873E7E606E66663E00FF ;G 35 | ; HEX 876666667E66666600FF ;H 36 | ; HEX 873C3C181818183C00FF ;I 37 | ; HEX 873C3C0C0C6C6C3800FF ;J 38 | ; HEX 87666C7870786C6600FF ;K 39 | ; HEX 876060606060607E00FF ;L 40 | ; HEX 87C6EEFED6C6C6C600FF ;M 41 | ; HEX 87C6E6F6DECEC6C600FF ;N 42 | ; HEX 873C7E666666663C00FF ;O 43 | ; HEX 877C7E66667C606000FF ;P 44 | ; HEX 873C7E6666666C3600FF ;Q 45 | ; HEX 877C7E667C786C6600FF ;R 46 | ; HEX 873E7E603C06067C00FF ;S 47 | ; HEX 877E7E181818181800FF ;T 48 | ; HEX 876666666666663C00FF ;U 49 | ; HEX 8766666666243C1800FF ;V 50 | ; HEX 87C6C6C6D6FEEEC600FF ;W 51 | ; HEX 87C6EE7C38386CC600FF ;X 52 | ; HEX 8766663C1818181800FF ;Y 53 | ; HEX 877E7E0C1830607E00FF ;Z 54 | ; HEX 871818181800181800FF ;! 55 | ; HEX 873C66660C00181800FF ;? 56 | ; HEX 871038FE7C386C4400FF ;* 57 | ; HEX 870000000000181800FF ;. 58 | ; HEX 870018180018180000FF ;: 59 | ; 60 | ;solidchr incbin solidchr.pp1 61 | ; hex 1eff00 62 | 63 | ;----------------------------------------------------------- 64 | titletopchrs incbin topchrs.pp1 65 | titlebotchrs incbin botchrs.pp1 66 | ;--------------------------------------------------------- 67 | robinchrs incbin robinchr.pp1 68 | ;---------------------------------------------- 69 | basechr incbin basechr.pp1 70 | beadchr incbin beadchr.pp1 71 | boxchr incbin boxchr.pp1 72 | archchr incbin archchr.pp1 73 | rockchr incbin rockchr.pp1 74 | bedchr incbin bedchr.pp1 75 | doorchr incbin doorchr.pp1 76 | 77 | okchr incbin okchr.pp1 78 | 79 | 80 |  -------------------------------------------------------------------------------- /source-code-marble-madness/marble.py: -------------------------------------------------------------------------------- 1 | # Marble Madness 2 | from pygame import image 3 | 4 | HEIGHT = 570 5 | WIDTH = 600 6 | gameState = 0 7 | marble = Actor('marble', center=(300, 45)) 8 | marbleh = Actor('marble', center=(300, 60)) 9 | marble.dir = marble.speed = 0 10 | heightmap = image.load('images/height45.png') 11 | debug = False 12 | 13 | def draw(): 14 | if(debug): 15 | screen.blit("height45", (0, 0)) 16 | marbleh.draw() 17 | else: 18 | screen.blit("map", (0, 0)) 19 | if gameState == 0: 20 | marble.draw() 21 | else: 22 | if gameState == 2: 23 | screen.draw.text("YOU WIN!", center = (300, 300), owidth=0.5, ocolor=(255,255,255), color=(0,0,255) , fontsize=80) 24 | marble.draw() 25 | else: 26 | screen.draw.text("GAME OVER!", center = (300, 300), owidth=0.5, ocolor=(255,255,255), color=(0,0,255) , fontsize=80) 27 | screen.blit("overlay", (0, 0)) 28 | 29 | def update(): 30 | if gameState == 0: 31 | if keyboard.left: 32 | marble.dir = max(marble.dir-0.1,-1) 33 | marble.speed = min(1,marble.speed + 0.1) 34 | if keyboard.right: 35 | marble.dir = min(marble.dir+0.1,1) 36 | marble.speed = min(1,marble.speed + 0.1) 37 | moveMarble() 38 | marble.speed = max(0,marble.speed - 0.01) 39 | 40 | def moveMarble(): 41 | global gameState 42 | ccol = getHeight(marbleh.x,marbleh.y) 43 | lcol = getHeight(marbleh.x-10,marbleh.y+10) 44 | rcol = getHeight(marbleh.x+10,marbleh.y+10) 45 | if ccol.r == 0: 46 | gameState = 1 47 | if (lcol.r < ccol.r or rcol.r < ccol.r): 48 | marble.y += marble.speed 49 | marble.speed += 0.03 50 | marbleh.x += marble.speed*marble.dir 51 | marbleh.y += marble.speed 52 | marble.x = marbleh.x 53 | marble.y = (marbleh.y*0.6)+((255-ccol.r)*1.25) 54 | marble.angle = marble.angle + marble.speed*marble.dir*-10 55 | if marble.angle > 0 : marble.angle = -50 56 | if marble.angle < -50 : marble.angle = 0 57 | if marbleh.y > 610: gameState = 2 58 | 59 | def getHeight(x,y): 60 | return heightmap.get_at((int(x),int(y))) 61 | 62 | 63 | -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/TIMINGS.ROU: -------------------------------------------------------------------------------- 1 | 2 | ;; orgfullpage 3 | 4 | count = 0 5 | times16lo do 216 6 | defb >count 7 | count = count+16 8 | loop 9 | ;------------------------------------------ 10 | times32tablelo 11 | xx = 0 12 | do 14 13 | defb >xx 14 | xx = xx+64 15 | loop 16 | times32tablehi 17 | xx = 0 18 | do 14 19 | defb <(xx+&20*256) 20 | xx = xx+64 21 | loop 22 | ;------------------------------------------ 23 | waterchrs HEX 0C3F 24 | HEX 33FF 25 | HEX C0F3 26 | HEX 33FF 27 | HEX 01A3 28 | HEX 00C3 29 | HEX 003C 30 | HEX 18BD 31 | ;------------------------------------------ 32 | count = 0 33 | times16hi do 216 34 | defb $065f+((num/2)*dif) 18 | sta $70 19 | lda #<$065f+((num/2)*dif) 20 | sta $71 21 | 22 | ghfh LDA #4 23 | STA &7F0 24 | 25 | LOCK1 STA &FFF0 26 | JSR LOCK2 27 | STA &FFF1 28 | JSR LOCK2 29 | DEC &7F0 30 | BNE LOCK1 31 | 32 | 33 | lda $70 34 | sub #dif 35 | sta $70 36 | bcs !1 37 | dec $71 38 | 39 | 40 | !1 dec $72 41 | bne ghfh 42 | 43 | STA &FFF0 44 | JMP PASTLOCK 45 | 46 | LOCK2 LDX $70 ;#&60 47 | LDY $71 ;#&06 48 | bit $ff ; 49 | LOCK3 DEX 50 | BNE LOCK3 51 | DEY 52 | BNE LOCK3 53 | RTS 54 | 55 | PASTLOCK 56 | nops22 do 30 57 | nop 58 | loop 59 | if absolutely=1 60 | changebank 14 61 | jsr smiley 62 | changebank 12 63 | endif 64 | pastnops 65 | 66 | ;-------------------------------- 67 | lda cm_powerup 68 | pha 69 | if absolutely=1 70 | changebank 14 71 | jsr cm_logo 72 | changebank 12 73 | endif 74 | pla 75 | tax 76 | ;-------------------------------- 77 | 78 | 79 | ldy #0 80 | sty _control0 81 | sty _control1 82 | sty address 83 | sty address+1 84 | clearram 85 | !2 lda #0 86 | !1 sta (address),Y 87 | iny 88 | bne !1 89 | !3 inc address+1 90 | lda address+1 91 | cmp #1 92 | beq !3 93 | cmp #07 94 | bne !2 95 | 96 | 97 | changebank 13 98 |  jsr copyhiscorestoram 99 |  changebank 12 100 | 101 | ;-----------------------TEST FOR PAL VERSION 102 | ;; palversion=1 if it is pal UK 103 | ; lda #0 104 | ; sta _control0 105 | ; sta _control1 106 | ;palagain ;make sure this doesn't cross a page boundry 107 | ;!1 ldx _statusreg 108 | ; bpl !1 109 | ; lda #0 110 | ; sta address 111 | ; sta address+1 112 | ;testforpal inc address 113 | ; bne !1 114 | ; inc address+1 115 | ;!1 ldx _statusreg 116 | ; bpl testforpal 117 | ; ;;;USA = 7*256+&bf = 1983 118 | ; ;;;UK = 8*256+&a6 = 2214 119 | ; ;;;<2100=usa >2100=uk 120 | ; ;;;sometimes misses flyback and gives very big value 121 | ; add16toval address,-80,address 122 | ; lda address+1 123 | ; cmp #&9 124 | ; bcs palagain 125 | ; cmp #7 126 | ; bcc palagain 127 | ; 128 | ; ldx #0 129 | ; lda address+1 130 | ; cmp #&8 131 | ; bcc smaller_so_usa 132 | ; ldx #255 133 | ;smaller_so_usa 134 | ; stx palversion 135 | ; 136 | ;--------------------------------------------- 137 | 138 | lda #%10010000 139 | sta control0 140 | sta _control0 141 | sta seed 142 | lda #%00011110 143 | sta control1 144 | sta seed+1 145 | ; lda #0 146 | ; sta _control1 147 | jsr turninteroff1 148 | changebank 12 149 | 150 | lda #10 151 | jsr starttune 152 | 153 | 154 | ; jmp anewgame 155 | 156 | 157 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/JUNK: -------------------------------------------------------------------------------- 1 | HEX 0F080808080808080007070707070707 2 | HEX 0808080808080F000707070707070700 3 | HEX 020202020202FE00FEFEFEFEFEFEFE00 4 | HEX 7F40404040404040003F3F3F3F3F3F3F 5 | HEX FF0101010101010100FFFFFFFFFFFFFF 6 | HEX 4040404040407F003F3F3F3F3F3F7F00 7 | HEX 010101010101FF00FFFFFFFFFFFFFF00 8 | HEX 7EC0909BB4A49A95013F7C787363494C 9 | HEX 8F28E814140B0810400727F3F3F8F8F0 10 | HEX 22A14041818282829E1F3F3F7F7E7E7E 11 | HEX A0408000000000006040800000000000 12 | HEX E6292E5150A0201001E9E6CFCF1F1F0F 13 | HEX 800044AC582852B07EFC7CBCD8E8D290 14 | HEX 09060101010000000702000000000000 15 | HEX 48880404028282FE3878FCFCFE7E7E7E 16 | HEX 00FE8282828282FE00027E7E7E7E7E7E 17 | HEX 7F80807F003F4040007F7F7F007F3F3F 18 | HEX FF0000FF00FF000000FFFFFF00FFFFFF 19 | HEX FE0101FE00FC020200FFFFFE00FCFEFE 20 | HEX 000000000000FF00FFFFFFFFFFFFFF00 21 | HEX F00808F800FC00000FFFFBFB03FFFFFF 22 | HEX 0F10101F00070000F0EFEFFFF0FFFFFF 23 | HEX FF80808080878484007F7F6060676767 24 | HEX FE00000808F8080800FEFE0606F6F6F6 25 | HEX 84848484848484846767676767676767 26 | HEX 0808080808080808F6F6F6F6F6F6F6F6 27 | HEX 848484849F80800067676767607F7F00 28 | HEX 08080808F8000000F6F6F6F606FEFE00 29 | HEX 050B0B0B0B050202060C0C0C0C060303 30 | HEX 60B0B0B0B06040C0E070707070E0C0C0 31 | HEX 0F08083F20203F00000707001F1F1F00 32 | HEX F01010FC0404FC0000F0F000FCFCFC00 33 | HEX 000F030202020505000F030303030606 34 | HEX 00F0C0C0C0C0606000F0C0C0C0C0E0E0 35 | HEX BFA0A0A0A0A3AC10009F9F9F9C90830F 36 | HEX DF50431DE100000000CCC0031FFFFFFF 37 | HEX 803E404040A0A0A000013F3F3F9F9F9F 38 | HEX 0F700E010102020200F1FEFFFFFEFEFE 39 | HEX BFA080605C838080009F9F233C7F7F7F 40 | HEX DF5050505090671800CFCFCF4F8FE7F8 41 | HEX FB8A898A8488D0200078787973674F1F 42 | HEX BFA0A0A1A2A2BA01009E9E9C99999900 43 | HEX 40808000000000803F7F7FFFFFFFFF7F 44 | HEX A040A0505028140A1F3F9FCFCFE7F3F9 45 | HEX 0000000001061860FFFFFFFFFFFEF8E0 46 | HEX 0A05040810204080F9FDFCF8F0E0C080 47 | HEX A0A0505FC00000009F9FCFDFC0000000 48 | HEX 020205FD00000000FEFEFCFC00000000 49 | HEX 80800000C0300C037F7FFFFF3F0F0300 50 | HEX 04030205050A1428FCFFFEFCFCF9F3E7 51 | HEX A850100804020100670F0F0703010000 52 | HEX FE02824222120A04007E3EDEEEF6FAFC 53 | HEX 0201010000000080FEFFFFFFFFFFFF7F 54 | HEX DF50509050502FC0004F4F8FCFCFEFC0 55 | HEX EE0908101010A02006E7E7CFCFCF9F1F 56 | HEX 619A6418040404081F86E0F8FCFCFCF8 57 | HEX A0A0404040407F001F9F3F3F3F3F3F00 58 | HEX 080808101010F000F8F8F8F0F0F0F000 59 | HEX 86592618202020107E3801071F1F1F0F 60 | HEX 6B92120A0A0A05040071F1F9F9F9FDFC 61 | HEX 1010100808080F000F0F0F0707070700 62 | HEX 050402020202FE00FCFDFEFEFEFEFE00 63 | HEX F01010101010101010F0F0F0F0F0F0F0 64 | HEX 4040404040407F003F3F3F3F3F3F3F00 65 | HEX 101010101010F000F0F0F0F0F0F0F000 66 | HEX 820280C6C68002827E7E380000387E7E 67 | HEX 82828282828282827E7E7E7E7E7E7E7E 68 | HEX 82828062628082827E7E1D01011D7E7E 69 | HEX 82828282828282826E6E463A3A3A467E 70 | HEX 0000000E12224242000000020E1E3E3E 71 | HEX 1EE2828282828282001E7E7E7E7E7E7E 72 | HEX F08E828282828282707E7E7E7E7E7E7E 73 | HEX 000000E0908884840000006070787C7C 74 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/REDEFCHR.ROU: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | setsofchrstable 5 | ;>chrdata,alphachrs,titletopchrs,titlebotchrs,robinchrs,solidchr,solidchr,basechr,beadchr,boxchr,archchr,rockchr,bedchr,doorchr,128 to be sent 12 | mloop equ 251 ;;start a loop, follow by number of times 13 | mendloop equ 250 ;;end loop.. 14 | mdownline equ 249 ;;jumps down by one line 15 | mjump equ 248 ;;jumps to new pointer 16 | mdownattr equ 247 ;;jumps addr by 8 for attr 17 | maddr equ 128 ;;about to send data address 18 | 19 | mbufferhorvert equ 1 ;;filling fast buffer is limited to adddresses 20 | ;;strings and setting vertical register 21 | 22 | ;e.g defb maddr+hiaddr,loaddr,"ANDREW",mend 23 | ; defb maddr+hiaddr,loaddr,mlen,5, 254,255,0,1,2, mend 24 | 25 | ;;N.B chrs 0 and >128 can not be printed directly you must tell it string len 26 | 27 | 28 | ;;limitations with this routine are :- strings must not be more than 255 bytes 29 | ;;and if 0's or >128 are printed, you must tell it the string length first 30 | 31 | messagepointer equ toplevvar1 ;2 bytes 32 | lastaddress equ toplevvar3 ;2 bytes 33 | tempstore equ toplevvar5 ;1 34 | prtmessagefly flybackvar 35 | prtmessage ;x=low byte y=high byte of pointer 36 | stx messagepointer 37 | sty messagepointer+1 38 | printwhatataddress 39 | ldy #0 40 | printwhatataddress1 41 | lda (messagepointer),y 42 | notendyet iny 43 | cmp #128 44 | bcs notchr 45 | sta _vramdata 46 | bcc printwhatataddress1 ;;this will always jump 47 | notchr cmp #240 48 | bcc mustbeaddress 49 | cmp #mend 50 | bne !1 51 | rts 52 | !1 cmp #mlen 53 | beq setstringlen 54 | cmp #mgosub 55 | beq gosub 56 | cmp #mloop 57 | beq startloop 58 | cmp #mendloop 59 | beq endloop 60 | cmp #mdownline 61 | beq downlinerou 62 | cmp #mdownattr 63 | beq attrdownrou 64 | jmp jumpnewmessagejump 65 | 66 | printwhatataddress2 67 | iny 68 | bne printwhatataddress1 ;this will always jump 69 | 70 | mustbeaddress 71 | and #127 72 | sta lastaddress+1 73 | sta _vramaddr 74 | lda (messagepointer),y 75 | sta lastaddress 76 | sta _vramaddr 77 | jmp printwhatataddress2 78 | 79 | setstringlen lda (messagepointer),y 80 | iny 81 | tax 82 | stringlen1 lda (messagepointer),y 83 | iny 84 | sta _vramdata 85 | dex 86 | bne stringlen1 87 | beq printwhatataddress1 ;;must always jmp 88 | 89 | startloop lda (messagepointer),y 90 | iny 91 | repeatingloop 92 | pha 93 | tya 94 | pha 95 | jmp printwhatataddress1 96 | 97 | endloop sty tempstore 98 | pla 99 | tay 100 | pla 101 | sec 102 | sbc #1 103 | bne repeatingloop 104 | ldy tempstore 105 | jmp printwhatataddress1 106 | 107 | gosub lda messagepointer 108 | pha 109 | lda messagepointer+1 110 | pha 111 | lda (messagepointer),y 112 | tax 113 | iny 114 | lda (messagepointer),y 115 | iny 116 | sta messagepointer+1 117 | stx messagepointer 118 | tya 119 | pha 120 | jsr printwhatataddress 121 | pla 122 | tay 123 | pla 124 | sta messagepointer+1 125 | pla 126 | sta messagepointer 127 | jmp printwhatataddress1 128 | 129 | downlinerou lda #32 130 | joindownline clc 131 | adc lastaddress 132 | sta lastaddress 133 | tax 134 | bcc !1 135 | inc lastaddress+1 136 | !1 lda lastaddress+1 137 | sta _vramaddr 138 | stx _vramaddr 139 | jmp printwhatataddress1 140 | 141 | attrdownrou lda #8 142 | bne joindownline 143 | 144 | jumpnewmessagejump 145 | lda (messagepointer),y 146 | tax 147 | iny 148 | lda (messagepointer),y 149 | sta messagepointer+1 150 | stx messagepointer 151 | jmp printwhatataddress 152 | ;-------------------------------------------------------------- 153 | addtoprintbuffer 154 | ;;format addr,addr,len,string 155 | stx messagepointer 156 | sty messagepointer+1 157 | ldy #0 158 | ldx vrampointer 159 | contaddtobuffer 160 | lda (messagepointer),y 161 | sta vrambuffer,x 162 | iny 163 | inx 164 | lda (messagepointer),y 165 | sta vrambuffer,x 166 | iny 167 | inx 168 | lda (messagepointer),y 169 | sta vrambuffer,x 170 | inx 171 | sta tempstore 172 | iny 173 | addtoprintbufferlp 174 | lda (messagepointer),y 175 | sta vrambuffer,x 176 | iny 177 | inx 178 | dec tempstore 179 | bne addtoprintbufferlp 180 | stx vrampointer 181 | rts 182 | ;--------------------------------------------------------- 183 | emptyprintbufferflyadd 184 | jsr addtoprintbuffer 185 | emptyprintbufferfly 186 | flybackvar 187 | emptyprintbuffer 188 | ;;emptys print buffer that was filled by addtoprintbuffer 189 | ;;this should be automatically called on the interupt 190 | ;;however it can just be called if the screen is off 191 | 192 | lda vrampointer 193 | beq retmessage 194 | ldy #0 195 | veryfastprintout 196 | lda vrambuffer,y 197 | and #127 198 | sta _vramaddr 199 | iny 200 | lda vrambuffer,y 201 | sta _vramaddr 202 | iny 203 | ldx vrambuffer,y 204 | iny 205 | stringlen 206 | lda vrambuffer,y 207 | sta _vramdata 208 | iny 209 | dex 210 | bne stringlen 211 | cpy vrampointer 212 | bne veryfastprintout 213 | nomoremessage 214 | lda #0 215 | sta vrampointer 216 | retmessage rts 217 | 218 | 219 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/PP1UNPAK: -------------------------------------------------------------------------------- 1 | 2 | ;** PP1 character set unpacker ** 3 | 4 | ;8 bytes here 5 | PP1_ZBUF EQU ADR2 6 | ;16 bytes here 7 | PP1_TYPES EQU EDGE_BUF0 8 | PP1_FOL1 EQU PP1_TYPES+4 9 | PP1_FOL2 EQU PP1_TYPES+8 10 | PP1_FOL3 EQU PP1_TYPES+12 11 | 12 | ;also define ADR1=ADR1L,ADR1H 13 | 14 | ;also TEMP1..TEMP8 15 | 16 | 17 | PP1_DOWNLOAD3 18 | STXY ADR1 19 | TAX 20 | JMP PP1_UNPACK 21 | 22 | PP1_DOWNLOAD2 23 | STXY ADR1 24 | PP1_DOWNLOAD 25 | LDX #$D 26 | PP1_UNPACK 27 | ;X=bank#, ADR1 = packed chrs, data into $2007 28 | ;exit: ADR1=source for next char, temp8=#chars just done 29 | 30 | LDA $8000 31 | PHA 32 | SETBANK X 33 | 34 | LDY #0 35 | LDA (ADR1),Y 36 | STA TEMP1 37 | STA TEMP8 38 | INY 39 | ;temp1=#chrs 40 | 41 | LDA #$80 42 | STA TEMP2 43 | 44 | ;* do a character *2 45 | 46 | PP1_CHRLOOP 47 | 48 | ;* new header? * 49 | 50 | ;get bit into cf 51 | 52 | JSR PP1_GETC 53 | BCS PP1_GOTHEADER 54 | 55 | ;* fetch header * 56 | 57 | LDX #3 58 | !HL 59 | ;get type 60 | JSR PP1_GET2 61 | STA PP1_TYPES,X 62 | BEQ !T0 63 | LSR 64 | BEQ !T1 65 | BCC !T2 66 | 67 | ;type 3 68 | 69 | !T3 JSR PP1_T3 70 | STA PP1_FOL3,X 71 | JMP !T0 72 | 73 | ;type 2 74 | 75 | !T2 JSR PP1_T3 76 | STA TEMP3 77 | JSR PP1_GETC 78 | BCC !T0 79 | LDA TEMP3 80 | STA PP1_FOL2,X 81 | JMP !T0 82 | 83 | ;type 1 84 | 85 | !T1 JSR PP1_T1 86 | STA PP1_FOL1,X 87 | 88 | ;type 0 89 | 90 | !T0 91 | DEX 92 | BPL !HL 93 | 94 | PP1_GOTHEADER 95 | 96 | LDX #7 97 | PP1_GETLINE STX TEMP3 98 | 99 | ;* line repetition? * 100 | 101 | ASL TEMP2 102 | BCC !Q10 103 | BNE PP1_GOTLINE 104 | JSR PP1_GETQ 105 | BCS PP1_GOTLINE 106 | !Q10 107 | 108 | ;* unpack line * 109 | 110 | ;first pixel 111 | ; ASL TEMP2 112 | ; BNE !Q15 113 | ; JSR PP1_GETQ 114 | ;!Q15 ROL 115 | ; AND #1 116 | ; ASL TEMP2 117 | ; BNE !Q16 118 | ; TAX 119 | ; JSR PP1_GETQ 120 | ; TXA 121 | ;!Q16 ROL 122 | 123 | JSR PP1_GET2 124 | TAX 125 | 126 | STA TEMP4 ;bpl0 127 | LSR 128 | ORA #2 129 | STA TEMP5 ;bpl1 130 | 131 | ;next pixel 132 | !NEXT LDA PP1_TYPES,X 133 | BEQ !T0 134 | ASL TEMP2 135 | BCC !Q11 136 | BNE !T0 137 | JSR PP1_GETQ 138 | BCS !T0 139 | !Q11 140 | LDA PP1_TYPES,X 141 | LSR 142 | BEQ !T1 143 | BCC !T2 144 | 145 | !T3 ASL TEMP2 146 | BCC !Q12 147 | BNE !T1 148 | JSR PP1_GETQ 149 | BCS !T1 150 | !Q12 ASL TEMP2 151 | BCC !T2B 152 | BNE !Q13 153 | JSR PP1_GETQ 154 | BCC !T2B 155 | !Q13 LDA PP1_FOL3,X 156 | TAX 157 | JMP !P 158 | 159 | !T2 ASL TEMP2 160 | BCC !T1 161 | BNE !Q14 162 | JSR PP1_GETQ 163 | BCC !T1 164 | !Q14 165 | !T2B LDA PP1_FOL2,X 166 | TAX 167 | JMP !P 168 | 169 | !T1 LDA PP1_FOL1,X 170 | TAX 171 | 172 | !T0 TXA 173 | 174 | !P LSR 175 | ROL TEMP4 176 | LSR 177 | ROL TEMP5 178 | BCC !NEXT 179 | 180 | PP1_GOTLINE 181 | 182 | ;* store line * 183 | 184 | LDA TEMP4 185 | STA $2007 186 | 187 | LDX TEMP3 188 | LDA TEMP5 189 | STA PP1_ZBUF,X 190 | DEX 191 | BPL PP1_GETLINE 192 | 193 | LDX #7 194 | !BPL1 LDA PP1_ZBUF,X 195 | STA $2007 196 | DEX 197 | BPL !BPL1 198 | 199 | ;* next char * 200 | 201 | DEC TEMP1 202 | BEQ !DONE 203 | JMP PP1_CHRLOOP 204 | !DONE 205 | 206 | ;* done * 207 | 208 | PLA 209 | SETBANK A 210 | RTS 211 | 212 | 213 | ;** get 1 bit into carry ** 214 | 215 | PP1_GETC 216 | ASL TEMP2 217 | BEQ !H0 218 | RTS 219 | 220 | !H0 221 | PP1_GETQ LDA (ADR1),Y 222 | INY 223 | BNE !H2 224 | INC ADR1H 225 | !H2 ROL 226 | STA TEMP2 227 | RTS 228 | 229 | 230 | ;** get 2 bits into A ** 231 | 232 | PP1_GET2 233 | 234 | ;get b1 235 | ASL TEMP2 236 | BNE !20 237 | 238 | LDA (ADR1),Y 239 | INY 240 | BNE !22 241 | INC ADR1H 242 | !22 ROL 243 | STA TEMP2 244 | !20 245 | ROL 246 | AND #1 247 | ;get b2 248 | ASL TEMP2 249 | BEQ !21 250 | 251 | ROL 252 | ;zf=1 if A=0 253 | RTS 254 | 255 | !21 256 | PHA 257 | LDA (ADR1),Y 258 | INY 259 | BNE !23 260 | INC ADR1H 261 | !23 ROL 262 | STA TEMP2 263 | PLA 264 | 265 | ROL 266 | ;zf=1 if A=0 267 | RTS 268 | 269 | 270 | ;** get info for folcol1 ** 271 | 272 | PP1_T1 JSR PP1_GETC 273 | BCC !T1B 274 | LDA PP1_FC1,X 275 | ;zf set from A 276 | RTS 277 | !T1B JSR PP1_GETC 278 | BCS !T1C 279 | LDA PP1_FC2,X 280 | ;zf set from A 281 | RTS 282 | !T1C LDA PP1_FC3,X 283 | ;zf set from A 284 | RTS 285 | 286 | 287 | ;** get info for folcol2 & folcol3 ** 288 | 289 | PP1_T3 JSR PP1_T1 290 | STA PP1_FOL1,X 291 | BEQ !T3.0 292 | CMP #2 293 | BCC !T3.1 294 | BEQ !T3.2 295 | !T3.3 LDA PP1_F3L,X 296 | STA PP1_FOL2,X 297 | LDA PP1_F3H,X 298 | RTS 299 | !T3.2 LDA PP1_F2L,X 300 | STA PP1_FOL2,X 301 | LDA PP1_F2H,X 302 | RTS 303 | !T3.1 LDA PP1_F1L,X 304 | STA PP1_FOL2,X 305 | LDA PP1_F1H,X 306 | RTS 307 | !T3.0 LDA PP1_F0L,X 308 | STA PP1_FOL2,X 309 | LDA PP1_F0H,X 310 | RTS 311 | 312 | 313 | ;** tables ** 314 | 315 | PP1_FC3 HEX 030303;02 316 | PP1_FC2 HEX 020201;01 317 | PP1_FC1 HEX 01000000 318 | 319 | PP1_F0L EQU PP1_FC2 320 | ;HEX FF020101 321 | PP1_F0H EQU PP1_FC3 322 | ;HEX FF030302 323 | PP1_F1L HEX 02FF0000 324 | PP1_F1H EQU PP1_FC3 325 | ;HEX 03FF0302 326 | PP1_F2L EQU PP1_FC1 327 | ;HEX 0100FF00 328 | PP1_F2H HEX 0303FF01 329 | PP1_F3L EQU PP1_FC1 330 | ;HEX 010000 331 | PP1_F3H EQU PP1_FC2 332 | ;HEX 020201 333 | 334 | 335 | ;** end of pp1pack ** 336 | PP1_SIZE EQU *-PP1_DOWNLOAD3 337 | ;341+30 338 | 339 | -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/PRTROBIN.ROU: -------------------------------------------------------------------------------- 1 | flashrobin defb 4,2,2,2,2,2 2 | ;------------------------ 3 | printrobin ;dir 1=left 0=right 2=climbing 4 | ;anim 0-7 for running 5 | ;bow 0-15 6 | ;crouch 0=standing 1=half robincrouch 2=full robincrouch 7 | lda killed 8 | beq !1 9 | rts 10 | !1 11 | jsr checkrobinbehind 12 | lda #0 13 | sta spritecolour 14 | lda robininvinc 15 | beq printrobin1 16 | dec robininvinc 17 | lda robininvinc 18 | cmp #150 19 | bcc !2 20 | rts 21 | !2 lsr 22 | lsr 23 | lsr 24 | lsr 25 | lsr 26 | tax 27 | lda flashrobin,x 28 | and counter 29 | bne printrobin1 30 | lda #2 31 | sta spritecolour 32 | 33 | printrobin1 34 | ;legs 35 | lda oleftright 36 | pha 37 | lda robinladder 38 | beq !1 39 | jmp printrobinonladder 40 | 41 | !1 lda robinxl 42 | sec 43 | sbc scrxl 44 | tax 45 | sta robinonscrx 46 | sta address5 47 | ldy robiny 48 | sty temp9 49 | lda robinanim 50 | add #legsrunning 51 | cmp #legsrunning-1 52 | bne normalrun 53 | lda #morelegs 54 | 55 | normalrun sta address5+1 56 | sta address7+1 57 | stx address8 58 | sty address8+1 59 | ldx #morelegs+3 60 | lda robincrouch ;robin crouching 61 | beq workoutbody 62 | cmp #-4 63 | beq !1 64 | cmp #-3 65 | beq !1 66 | cmp #-5 67 | beq !1 68 | dex 69 | dex 70 | !1 stx address5+1 71 | stx address7+1 72 | cpx #morelegs+1 73 | beq workoutbody 74 | jsr subtrackheightofsprite 75 | lda address5 76 | tax 77 | add #4 78 | bit oleftright 79 | bpl !2 80 | sec 81 | sbc #8 82 | !2 sta address5 83 | lda #morelegs+2 84 | sta address5+1 85 | asl oleftright 86 | jsr printspriteposrev 87 | jmp workouthead 88 | 89 | workoutbody jsr subtrackheightofsprite 90 | 91 | lda robinfiring 92 | beq !3 93 | jmp printrobinshooting 94 | !3 95 | ldx address5 96 | lda robinanim 97 | bmi !2 98 |  and #7 99 | !2 add #robinbodies 100 | cmp #robinbodies-1 101 | bne !1 102 | lda #robinbodies+8 103 | !1 sta address5+1 104 | asl oleftright 105 | jsr printspriteposrev 106 | 107 | workouthead 108 | jsr workoutheadrou 109 | 110 | nowprintlegs 111 | lda address7+1 112 | ldx address8 113 | ldy address8+1 114 | asl oleftright 115 | jsr printspriteposrev 116 | pla 117 | sta oleftright 118 | lda #0 119 | sta spritebehind 120 | rts 121 | 122 | 123 | robpointtable defb 255,0,0 124 | robinlooktab defb 0,0,0,0,1,0,0,2,3 125 | 126 | 127 | spriteheights defb -15 ;head0 128 | defb -15 ;head1 129 | defb -15 ;head2 130 | defb -15 ;head3 131 | defb -7 ;robinbody0 132 | defb -7 ;robinbody1 133 | defb -7 ;robinbody2 134 | defb -7 ;robinbody3 135 | defb -7 ;robinbody4 136 | defb -7 ;robinbody5 137 | defb -7 ;robinbody6 138 | defb -7 ;robinbody3 139 | defb -7 ;robinstanding 140 | defb -7 ;bodyfire0 141 | defb -7 ;bodyfire1 142 | defb -7 ;bodyfire2 143 | defb -7 ;bodyfire3 144 | defb -15 ;legsrunning0 145 | defb -14 ;legsrunning1 146 | defb -15 ;legsrunning2 147 | defb -15 ;legsrunning3 148 | defb -15 ;legsrunning4 149 | defb -14 ;legsrunning5 150 | defb -15 ;legsrunning6 151 | defb -15 ;legsrunning3 152 | defb -15 ;legsstanding 153 | defb -10;12 ;legshalfcrouch 154 | defb -1 ;3 ;bodyfullcrouch 155 | defb -8 ;legsfullcrouch 156 | defb -11 ;legsjumping 157 | defb -10 ;bodyonladder 158 | defb -13 ;legsonladder 159 | ;------------------------------------------------------ 160 | workoutheadrou 161 | jsr subtrackheightofsprite 162 | add #-14 163 | sta robinheight 164 | lda #robinheads 165 | !1 lda robinladder 166 | bne !2 167 | lda counter 168 | add #1 169 | and #31 170 | bne !2 171 | lda seed 172 | and #3 173 | add robinlook 174 | and #7 175 | sta robinlook 176 | !2 ldx robinlook 177 | lda robinlooktab,x 178 | add #robinheads 179 | ldx address5 180 | sta address5+1 181 | asl oleftright 182 | jmp printspriteposrev 183 | ;------------------------------------------------------ 184 | printrobinonladder 185 | ldy #8 186 | ldx #0 187 | lda robiny 188 | and #8 189 | beq !1 190 | ldx #%01100000 191 | !1 lda pad 192 | and #rmask 193 | beq !2 194 | ldy #4 195 | !2 lda pad 196 | and #lmask 197 | beq !3 198 | ldy #4 199 | txa 200 | add #128 201 | tax 202 | !3 stx oleftright 203 | sty robinlook 204 | lda robinxl 205 | sec 206 | sbc scrxl 207 | tax 208 | sta address5 209 | ldy robiny 210 | sty temp9 211 | lda #morelegs+6 212 | sta address5+1 213 | sta address7+1 214 | stx address8 215 | sty address8+1 216 | 217 | jsr subtrackheightofsprite 218 | 219 | ldx address5 220 | stx address6 221 | sty address6+1 222 | lda #morelegs+5 223 | sta address5+1 224 | sta address7 225 | 226 | jsr workoutheadrou 227 | 228 | ldx address6 229 | ldy address6+1 230 | lda address7 231 | asl oleftright 232 | jsr printspriteposrev 233 | 234 | jmp nowprintlegs 235 | 236 | ;------------------------------------------------------ 237 | printrobinshooting 238 | lsr 239 | lsr 240 | tax 241 | lda shootingfrms,x 242 | ldx address5 243 | !1 sta address5+1 244 | asl oleftright 245 | jsr printspriteposrev 246 | lda #0 247 | sta robinlook 248 | jmp workouthead 249 | 250 | shootingfrms defb bodyfiring+1,bodyfiring+2,bodyfiring+3,bodyfiring+4 251 | defb bodyfiring+3,bodyfiring+3,bodyfiring+2,bodyfiring+2 252 | defb bodyfiring+1,bodyfiring+1 253 | ;------------------------------------------------------- 254 | subtrackheightofsprite 255 | ldx address5+1 256 | lda temp9 257 | add spriteheights,x 258 | sta temp9 259 | tay 260 | rts 261 | 262 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/TITLE.ROU: -------------------------------------------------------------------------------- 1 | if title=1 2 | titlescreen 3 | 4 | lda #255 5 | sta solidfound 6 | ; lda #10 7 | ; jsr starttune 8 |  9 | stillintitle inc solidfound 10 | lda solidfound 11 | and #3 12 | sta solidfound 13 | and #1 14 | beq showtitle 15 | 16 | if hiscore=1 17 | sethiscore lda solidfound 18 | and #127 19 | lsr 20 | eor #255 21 | sta hipos 22 | jsr setuphiscores 23 | jmp turnonscreen 24 | endif 25 | showtitle jsr setuptitlescreen 26 | 27 | turnonscreen jsr turninteron 28 | waitforstart flybackvar 29 | 30 | lda solidfound 31 | ; bmi conttitleloop 32 | and #1 33 | bne notshowingtitle 34 | jsr putontitlesprites 35 | jmp conttitleloop 36 | notshowingtitle 37 | ldx #&0d 38 | jsr pulsecolour 39 | 40 | conttitleloop 41 | lda tune 42 | bne !2 43 | lda #1 44 | jsr starttune 45 | !2 46 | lda counter 47 | and #7 48 | bne !1 49 | dec robiny 50 | bne !1 51 | lda #&fb 52 | sta fadecounter 53 | !1 jsr waitforstartkey 54 | beq waitforstart 55 | lda solidfound 56 | bpl stillintitle 57 | rts 58 | 59 | putontitlesprites 60 | lda control0 61 | eor #8+16 62 | waitforsprcol 63 | sta _control0 64 | ldx #&19 65 | jsr pulsecolour 66 | 67 | ldx #16 68 | ldy #16-ydisplace 69 | lda #titlelogos 70 | jsr printsprite 71 | 72 | ; ldx #176 73 | ; ldy #26*8+2-ydisplace 74 | ; lda #titlelogos+1 75 | ; jsr printsprite 76 | 77 | ldx #128-8 78 | ldy #24*8-ydisplace 79 | lda #titlelogos+2 80 | jmp printsprite 81 | ;-------------------------------------------- 82 | setuptitlescreen 83 | lda #titletopchrs0.245 84 | jsr copyblockofcompactedchrs 85 | lda #titlebotchrs0.245 86 | jsr copyblockofcompactedchrs 87 | ldxy titlescreenmess 88 | jsr prtmessage 89 | jsr clearspriteblock 90 | lda #16*8-1-8 91 | sta spriteblock 92 | lda #&f3 93 | sta spriteblock+1 94 | lda #3 95 | sta spriteblock+2 96 | lda #225 97 | sta spriteblock+3 98 | lda #100 99 | sta robiny 100 | ldxy titlescreencolours 101 | jmp setfade 102 | ;-------------------------------------------- 103 | titlescreencolours 104 | HEX 0e091727 105 | hex 0e210919 106 | hex 0e211738 107 | hex 0e210020 108 | 109 | hex 0e27110e 110 | hex 0e20150e 111 | hex 0e000000 112 | hex 0e0e0e0e 113 | titlescreenmess 114 | defb mgosub 115 | defw clearscr 116 | defb maddr+&20,&0a 117 | HEX 010205070802050708121E1F 118 | defb mloop,10,&20,mendloop,mdownline 119 | HEX 0304090A0B04091314152122 120 | defb mloop,10,&20,mendloop,mdownline 121 | HEX 00050C0D0E0F161718192324 122 | defb mloop,10,&20,mendloop,mdownline 123 | HEX 0006050310111A1B1C1D25262728292A 124 | defb mloop,6,&20,mendloop,mdownline 125 | HEX 000000002D2E32333435404142435051525360612020 126 | defb mdownline 127 | HEX 000006032F0536373438444546475455565762636420 128 | defb maddr+&20,&c6,mloop,5,0,mendloop 129 | hex 0603300501393A343B48494A4B58595A5B65666720 130 | defb mdownline 131 | hex 00002B2C0006300131053C3D3E3F4C4D4E4F5C5D5E5F34686920 132 | defb mdownline,mlen,26 133 | HEX 002C6F707172020507087E7F8081838485868C8D8E8F34942020 134 | defb mdownline,mlen,26 135 | HEX 2B6A6F70737404090A0B1F202020208788899091929395962020 136 | defb mjump 137 | defw titlescreenmess2 138 | titlescreenmess2 139 | defb mdownline,mlen,26 140 | HEX 6B6C70757677790C0D7A82202020872020202020202097989920 141 | defb mdownline,mlen,26 142 | HEX 6D6E7800002B2C7B7C7D202020208A8B8720202020209A9B2020 143 | defb mdownline,mlen,26 144 | HEX 000000A66A6F70B220B3BCBD20BEC8C9CACBD1D2202020202020 145 | defb mdownline,mlen,26 146 | HEX 00A0A7A8A9AAB4B5B6B734BFC0C1CCCDCECF34D3BD2020202020 147 | defb mdownline,mlen,26+3*32 148 | HEX A1A2ABACADAEB83434343434C2C3000000D0D4D5BFD6DA202020 149 | HEX 9C9D9E9FA3A4A52020AFB0B1B9BABB34C4C5C6C700000000D7D8B0D9DB202020 150 | HEX 01020304090A0B0C111111111111161718191A00000000001C1D1E1111111111 151 | HEX 050607080D0E0F10121314151511111111111B0000000000001F111111111111 152 | defb mjump 153 | defw titlescreenmess3 154 | titlescreenmess3 defb mlen,6*32+15 155 | HEX 2021222328292A2B303132333536371111113C00000000000040414211454647 156 | HEX 242526272C2D2E2F3434343438393A3B3D3E3F00000000000000434448494949 157 | HEX 4A4B4C4D5A5B5C5D1111111111116C6D6E6F7000000000000000007D82838485 158 | HEX 4E4F50515E5F6061111111111111343471727374767778000000007E34348687 159 | HEX 52535455626364656A1111111111343434343475797A7B7C7F7C808188898A8B 160 | HEX 56575859666768696B111111111134343434343434343434343434348C8D8E8F 161 | HEX 909192939FA0A1A2AEAFB01111BDBE 162 | defb mloop,17,&11,mendloop 163 | defb mlen,15 164 | HEX 9495969700A3A4A5B1B2B3B4BFC0C1 165 | defb mloop,17,&11,mendloop,mlen,14 166 | HEX 98999A9BA6A7A8A9B5B6B7B8C2C3 167 | defb mjump 168 | defw titlescreenmess4 169 | titlescreenmess4 170 | defb mloop,18,&11,mendloop 171 | defb mlen,12 172 | HEX 349C9D9EAAABACADB9BABBBC 173 | defb mloop,20,&11,mendloop,mlen,9 174 | HEX C4C5C6C7CCCDCECFD4 175 | defb mloop,23,&11,mendloop,mlen,8 176 | HEX C8C9CACBD0D1D2D3 177 | defb mloop,24,&11,mendloop 178 | 179 | defb mlen,3*16 180 | HEX 0000C499AAA6A5550000F09BAAAAAAAA 181 | HEX 00CCFFFBFAFAFAAA0080FFFFFFCFFFF5 182 | HEX 0004555D5F007F5F0000004455555455 183 | defb mend 184 | endtitle 185 | 186 | endif 187 | 188 | pulsecolour ;x=colour to pulse 189 | ldy vrampointer 190 | lda #&3f 191 | sta vrambuffer,y 192 | txa 193 | sta vrambuffer+1,y 194 | lda #1 195 | sta vrambuffer+2,y 196 | lda counter 197 | and #31 198 | lsr 199 | tax 200 | lda pulsetable,x 201 | sta vrambuffer+3,y 202 | tya 203 | add #4 204 | sta vrampointer 205 | rts 206 | pulsetable defb &17,&26,&27,&36,&37,&38,&30,&30 207 | defb &30,$38,&37,&36,&27,&26,&17,&17 208 | 209 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/MACROS.MUS: -------------------------------------------------------------------------------- 1 |  if musicon=1 2 | ******************************************************** 3 | *MACROS FOR THE NINTENDO 8-BIT CONSOLE * 4 | * * 5 | *(C) 1991 G.RAEBURN * 6 | * * 7 | *6502 ASSEMBLY SOURCE * 8 | ******************************************************** 9 | 10 | ;$4010 SAMPLE STATUS 11 | ;128 1=ENABLE IRQ AFTER SAMPLE 12 | ;64 1=REPLAY SAMPLE 13 | ;32-1 SAMPLE SPEED 14 | ;(8-1) MUSICAL SCALE (WHITE KEYS) 15 | ;(32-8) DIFF SPEEDS (NOT SCALE) 16 | 17 | ;$4011 D TO A CONVERTER 18 | ;$4012 SAMPLE START - X*64+$C000 19 | ;$4013 SAMPLE END - (X+1)*16 20 | ;$4014 LOADS VDP WITH SPRITE SET 21 | ;$4015 BITS 0-3 ENABLE SOUND. BIT 4 = ENABLE SAMPLES 22 | ;$4016 KEYPADS+? 23 | ;$4017 KEYPADS+? 24 | 25 | OPTION 0,0 26 | 27 | NEXUS_RAM MACRO 28 | LDA #$8B 29 | STA $C003 30 | ENDM 31 | 32 | NEXUS_ROM MACRO 33 | LDA #$4B 34 | STA $C003 35 | ENDM 36 | 37 | DV MACRO 38 | DS @1 39 | 40 | IF *>$7F5;C 41 | ERROR "OUT OF RAM... 42 | ENDIF 43 | 44 | ENDM 45 | 46 | SOAPY_BITS MACRO 47 | JSR TESTPDS 48 | ;NOP 49 | ;NOP 50 | ;NOP 51 | ENDM 52 | 53 | DELAY MACRO 54 | LDX #@1 55 | LDY #0 56 | !1 DEY 57 | BNE !1 58 | DEX 59 | BNE !1 60 | ENDM 61 | 62 | ACCESS_ON MACRO 63 | LDA #$8B 64 | STA $C003 65 | ENDM 66 | 67 | ACCESS_OFF MACRO 68 | LDA #$4B 69 | STA $C003 70 | ENDM 71 | 72 | BWON MACRO 73 | LDA STATUS1 74 | ORA #1 75 | STA _STATUS1 76 | ENDM 77 | 78 | BWOFF MACRO 79 | LDA STATUS1 80 | STA _STATUS1 81 | ENDM 82 | 83 | VECT MACRO 84 | DB <@1,>@1 85 | ENDM 86 | 87 | ; 88 | ;LOAD FILENAME,VRAM ADDRESS,BANK NO. 89 | ; 90 | GFX MACRO 91 | LDA #0 92 | JSR NEW_UNPACK 93 | 94 | DW @1 95 | DW @2 96 | DB @3 97 | ENDM 98 | 99 | ; 100 | ;LOAD FILENAME,VRAM ADDRESS,BANK NO. 101 | ; 102 | GFX_VBL MACRO 103 | INC DOWN_LOADING 104 | LDA #128 105 | JSR NEW_UNPACK 106 | 107 | DW @1 108 | DW @2 109 | DB @3 110 | ENDM 111 | 112 | ; 113 | ;LOAD FILENAME,VRAM ADDRESS,BANK NO. 114 | ; 115 | UNPACK MACRO 116 | JSR UNPACK_SCREEN 117 | 118 | DW @1 119 | DW @2 120 | DB @3 121 | ENDM 122 | 123 | 124 | 125 | LOW MACRO 126 | LDA #<@1 127 | ENDM 128 | 129 | HIGH MACRO 130 | LDA #>@1 131 | ENDM 132 | 133 | LOWX MACRO 134 | LDX #<@1 135 | ENDM 136 | 137 | HIGHX MACRO 138 | LDX #>@1 139 | ENDM 140 | 141 | LOWY MACRO 142 | LDY #<@1 143 | ENDM 144 | 145 | HIGHY MACRO 146 | LDY #>@1 147 | ENDM 148 | 149 | VRAM MACRO 150 | HIGH @1 151 | STA $2006 152 | LOW @1 153 | STA $2006 154 | ENDM 155 | 156 | PIC MACRO 157 | INCBIN C:\gav\NIN4\GFX4\@1.OBJ 158 | ;INCBIN C:\GAV/NIN\GFX\@1.OBJ 159 | ENDM 160 | 161 | UDG MACRO 162 | INCBIN C:\GAV\NIN4\GFX4\@1.CHR 163 | ;INCBIN C:\GAV/NIN\GFX\@1.CHR 164 | ENDM 165 | 166 | GRAPHIC MACRO 167 | INCBIN C:\gav\NIN2\GFX\@1.OBJ 168 | ;INCBIN C:\GAV/NIN\GFX\@1.OBJ 169 | ENDM 170 | 171 | CHAR MACRO 172 | INCBIN C:\GAV\NIN2\GFX\@1.CHR 173 | ;INCBIN C:\GAV/NIN\GFX\@1.CHR 174 | ENDM 175 | 176 | GRAFIX MACRO 177 | INCBIN C:\GAV\NIN3\GFX\@1.OBJ 178 | ENDM 179 | 180 | CHARS MACRO 181 | INCBIN C:\GAV\NIN3\GFX\@1.CHR 182 | ENDM 183 | 184 | LOAD MACRO 185 | LOW @2 186 | STA @1 187 | HIGH @2 188 | STA @1+1 189 | ENDM 190 | 191 | FADE MACRO 192 | JSR SETFADE 193 | 194 | LOW @1 195 | STA $17E 196 | HIGH @1 197 | STA $17F 198 | ENDM 199 | 200 | FADE2 MACRO 201 | JSR SETFADE2 202 | ENDM 203 | ; 204 | ;WRITE TO SCREEN(0 OR 1),X,Y,CHARACTER 205 | ; 206 | WRITE MACRO 207 | IF @1 208 | HIGH $2400+(@3*32)+@2 209 | STA $2006 210 | LOW $2400+(@3*32)+@2 211 | STA $2006 212 | LDA #@4 213 | STA $2007 214 | EXITM 215 | ENDIF 216 | 217 | HIGH $2000+(@3*32)+@2 218 | STA $2006 219 | LOW $2000+(@3*32)+@2 220 | STA $2006 221 | LDA #@4 222 | STA $2007 223 | ENDM 224 | 225 | 226 | 227 | SETBANK MACRO 228 | IFS [@1] [X] 229 | 230 | TXA 231 | STA BANKBITS,X 232 | 233 | EXITM 234 | ENDIF 235 | 236 | 237 | IFS [@1] [A] 238 | 239 | TAX 240 | STA BANKBITS,X 241 | 242 | ELSE 243 | 244 | LDA #@1 245 | STA BANKBITS+@1 246 | 247 | ENDIF 248 | ENDM 249 | 250 | 251 | 252 | INN MACRO 253 | INC @1 254 | BNE !1 255 | INC @1+1 256 | !1 257 | ENDM 258 | 259 | G MACRO 260 | DW @1 261 | DW @2 262 | DB @3 263 | ENDM 264 | 265 | gav_ADD MACRO 266 | LDA @2 267 | CLC 268 | ADC @1 269 | STA @2 270 | BCC !1 271 | INC @2+1 272 | !1 273 | ENDM 274 | 275 | gav_SUB MACRO 276 | LDA @2 277 | SEC 278 | SBC @1 279 | STA @2 280 | BCS !1 281 | DEC @2+1 282 | !1 283 | ENDM 284 | 285 | MOVE MACRO 286 | LOW @2 287 | STA @1 288 | HIGH @2 289 | STA @1+1 290 | ENDM 291 | 292 | CLOCKS MACRO 293 | CLN = @1 [2,350] 294 | IF CLN>8 295 | REPEAT (CLN-2)/7 296 | HEX 4868 297 | ;=PHAPLA 298 | CLN = CLN-(CLN-2)/7*7 299 | ENDIF 300 | 301 | IF CLN=7 302 | PHA 303 | PLA 304 | 305 | ELSE 306 | 307 | IF CLN>4 308 | BIT 0 309 | CLN = CLN-3 310 | ENDIF 311 | IF CLN&1 312 | BIT 0 313 | ELSE 314 | NOP 315 | ENDIF 316 | IF CLN>3 317 | NOP 318 | ENDIF 319 | 320 | ENDIF 321 | 322 | ENDM 323 | 324 | 325 | TICKS MACRO 326 | JSR TICKS@@1 327 | ENDM 328 | 329 | 330 | TIMEY MACRO ;CORRUPTS X & Y 331 | CLN = @1 332 | IFS [@2] [] 333 | ELSE 334 | CLN = CLN+(@2)*113+(@2)*66/100 335 | ENDIF 336 | CLN2 = 0 337 | IF (CLN=30)!(CLN>31) 338 | CLN = CLN-30 339 | IF CLN-CLN/5*5=1 340 | CLN2 = 2 341 | CLN = CLN-2 342 | ENDIF 343 | LDX #<(CLN/5)+1 344 | LDY #>(CLN/5)+256 345 | JSR BIGTIMECODE 346 | CLN = CLN-CLN/5*5 347 | ENDIF 348 | 349 | CLN = CLN+CLN2 350 | IF (CLN=12)!(CLN>13) 351 | TICKS CLN 352 | ELSE 353 | IF CLN 354 | CLOCKS CLN 355 | ENDIF 356 | ENDIF 357 | 358 | ENDM 359 | 360 | endif 361 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/VARS.PDS: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ;--------------------------------------- 6 | cm_gamebyte equ &7fd 7 | cm_flags equ &7fe 8 | cm_powerup equ &7ff 9 | smiley_lobank equ &c 10 | smiley_hibank equ &f 11 | 12 | zvar cm_frames ,1 13 | zvar control0 ,1 14 | zvar control1 ,1 15 | zvar interon ,1 16 | zvar seed ,3 17 | zvar pad ,1 18 | zvar debounce ,1 19 | ; zvar tstatepausex ,1 20 | ; zvar tstatepausey ,1 21 | zvar y.scroll ,1 22 | zvar x.scroll ,1 23 | zvar flyflag ,1 24 | zvar vrampointer ,1 25 | zvar bankno ,1 26 | zvar spriteblockpointer ,1 27 | var finishedloop ,1 28 | zvar blockpointer ,1 29 | zvar counter ,1 30 | ; zvar clock ,1 31 | 32 | zvar toplevvar1 ,1 33 | zvar toplevvar2 ,1 34 | zvar toplevvar3 ,1 35 | zvar toplevvar4 ,1 36 | zvar toplevvar5 ,1 37 | zvar toplevvar6 ,1 38 | zvar toplevvar7 ,1 39 | zvar toplevvar8 ,1 40 | zvar toplevvar9 ,1 41 | zvar toplevvar10 ,1 42 | 43 | zvar address ,2 44 | zvar address1 ,2 45 | zvar address2 ,2 46 | zvar address3 ,2 47 | zvar address4 ,2 48 | zvar address5 ,2 49 | zvar address6 ,2 50 | zvar address7 ,2 51 | zvar address8 ,2 52 | zvar address9 ,2 53 | zvar tempx ,1 54 | zvar tempy ,1 55 | zvar temp ,1 56 | zvar temp1 ,1 57 | zvar temp2 ,1 58 | zvar temp3 ,1 59 | zvar temp4 ,1 60 | zvar temp5 ,1 61 | zvar temp6 ,1 62 | zvar temp7 ,1 63 | zvar temp8 ,1 64 | zvar temp9 ,1 65 | 66 | ; zvar gamevar1 ,1 ;;variable space for each game 67 | ; zvar gamevar2 ,1 68 | ; zvar gamevar3 ,1 69 | ; zvar gamevar4 ,1 70 | ; zvar gamevar5 ,1 71 | ; zvar gamevar6 ,1 72 | ; zvar gamevar7 ,1 73 | ; zvar gamevar8 ,1 74 | ; zvar gamevar9 ,1 75 | ; zvar gamevar10 ,1 76 | 77 | zvar scrxl ,1 78 | zvar scrxh ,1 79 | zvar mapstrip ,1 80 | zvar attripointer ,1 81 | zvar blockattri ,1 82 | var chrfound ,1 83 | var blockfound ,1 84 | var blockx ,1 85 | var blocky ,1 86 | var minmap ,1 87 | var maxmap ,1 88 | zvar mappointer ,2 89 | zvar mapno ,1 90 | 91 | var robindx ,1 92 | var robinxl ,1 93 | var robinxh ,1 94 | var robiny ,1 95 | var robinonscrx ,1 96 | var leftright ,1 97 | var oleftright ,1 98 | var orobinxl ,1 99 | var orobinxh ,1 100 | var orobiny ,1 101 | var runcount ,1 102 | 103 | var robindir ,1 104 | var robinanim ,1 105 | var robinfiring ,1 106 | var robincrouch ,1 107 | var robinheight ,1 108 | var robinjumping ,1 109 | var robingravity ,1 110 | var robinlook ,1 111 | var robinladder ,1 112 | var robinladdercounter,1 113 | var robininvinc ,1 114 | var robinbehind ,1 115 | var robinjustjumped ,1 116 | 117 | var oldxl ,1 118 | var oldxh ,1 119 | var oldy ,1 120 | var oldladder ,1 121 | var killed ,1 122 | 123 | 124 | var deadarrowx ,2 125 | var deadarrowy ,1 126 | var deadarrowcount ,1 127 | var animatedoor ,1 128 | var doorx ,1 129 | var doory ,1 130 | 131 | zvar solidfound ,1 132 | 133 | var juststartedlife ,1 134 | zvar pause ,1 ;pause rou 135 | zvar dontpause ,1 ;pause rou 136 | zvar palversion ,1 137 | var hipos ,1 ;hiscore sorting 138 | zvar scrolldir ,1 139 | 140 | var ingame ,1 141 | zvar lives ,1 142 | zvar hearts ,1 143 | zvar heartcounter ,1 144 | 145 | zvar noofparas ,1 146 | zvar extravarpointer,1 147 | 148 | var treasures ,6 149 | var coinnum ,1 150 | ;---------------------------------------------------- 151 | resetvars equ varlim 152 | var coinnumx ,1 153 | var coinnumy ,1 154 | var coinnumcount ,1 155 | var attributes ,7*8*2 156 | var completedgame ,1 157 | 158 | noofextravars equ 128 159 | var extravars ,noofextravars 160 | noofarrows equ 8 161 | var arrowxl ,noofarrows 162 | var arrowxh ,noofarrows 163 | var arrowy ,noofarrows 164 | var arrowdir ,noofarrows 165 | var arrowcanon ,noofarrows 166 | var arrowcounter ,noofarrows 167 | noofspitters equ 4 168 | var spitterxl ,noofspitters 169 | var spitterxh ,noofspitters 170 | var spittery ,noofspitters 171 | var spitterdir ,noofspitters 172 | 173 | noofbats equ 4 174 | var batxl ,noofbats 175 | var batxh ,noofbats 176 | var baty ,noofbats 177 | var batxdir ,noofbats 178 | var batydir ,noofbats 179 | var batwingcount ,noofbats 180 | 181 | noofonscreens equ 16 182 | var onscreenrou ,noofonscreens 183 | var onscreenxl ,noofonscreens 184 | var onscreenxh ,noofonscreens 185 | var onscreeny ,noofonscreens 186 | var onscreencount1 ,noofonscreens 187 | var onscreencount2 ,noofonscreens 188 | 189 | var heartstable ,48 190 | var filledblockbuffer,1 191 | var riseup ,1 192 | endofresetvars equ varlim 193 | ;----------------------------------------- 194 | 195 | zvar fadecounter ,1 196 | var fadecolours ,32 197 | zvar fadetemp ,1 198 | 199 | zvar heartxl ,1 200 | zvar heartxh ,1 201 | zvar hearty ,1 202 | maxchangedblocks equ 22 203 | var changedblocks ,3*maxchangedblocks 204 | zvar changedblockspointer,1 205 | 206 |  var score ,7 207 |  208 | ; var test1,1 209 | ; var test2,1 210 | ; var test3,1 211 | 212 | 213 | ;--------------------------------------------------------------- 214 | _deltadem equ $4011 ;Delta demodulator. 215 | _dmafunc equ $4014 ;DMA function to transfer sprite data. 216 | _kpreg1 equ $4016 ;Keypad 1 register. 217 | _kpreg2 equ $4017 ;Keypad 2 register. 218 | 219 | ;Video Processor Registers 220 | 221 | _control0 equ $2000 ;Control register 0. 222 | _control1 equ $2001 ;Control register 1. 223 | _statusreg equ $2002 ;Status register. 224 | _spriteaddr equ $2003 ;Sprite address set. 225 | _spritedata equ $2004 ;Sprite data set. 226 | _scrollcon equ $2005 ;Scroll control. 227 | _vramaddr equ $2006 ;VRAM address register. 228 | _vramdata equ $2007 ;VRAM data register. 229 | _bank equ &fffe 230 | 231 | ;Ordinary constants. 232 | spriteblock equ &0200 233 | vrambuffer equ &0100 ;same as stack ,but this works up 234 | normalvars equ &0300 ;;;>&7ff 235 | blockbuffer equ &170 ;this leaves 112 for vrambuffer 236 | 237 | 238 | ;----------------------------------------------------------------- 239 | hiscoresinram equ &7eD-17*10+1 240 | 241 | 242 | org &8000 243 | 244 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/EXPLODE.ROU: -------------------------------------------------------------------------------- 1 | robinhearts lda robiny 2 | add #-18 3 | sta heartstable+2,x 4 | lda robinxl 5 | sec 6 | sbc #4 7 | sta heartstable+0,x 8 | lda robinxh 9 | sbc #0 10 | sta heartstable+1,x 11 | rts 12 | ;----------------------------------- 13 | updatehearts 14 | ldx #0 15 | morehearts stx htempxreg 16 | lda heartstable,x 17 | ora heartstable+1,x 18 | beq endhearts 19 | updateheartslp 20 | lda heartstable+5,x 21 | bpl !1 22 | jsr robinhearts 23 | !1 lda heartstable,x 24 | sec 25 | sbc scrxl 26 | sta heartxl 27 | lda heartstable+1,x 28 | sbc scrxh 29 | sta heartxh 30 | lda heartstable+2,x 31 | sta hearty 32 | lda heartstable+3,x 33 | sta htempchr 34 | lda heartstable+4,x 35 | lsr 36 | lsr 37 | lsr 38 | lsr 39 | sta htempcol 40 | lda heartstable+4,x 41 | and #15 42 | sta noofhparas 43 | lda heartstable+5,x 44 | and #31 45 | sta htemprou 46 | 47 | doeachheart 48 | ldy htemprou 49 | lda exploderoubitsl,y 50 | sta address 51 | lda exploderoubitsh,y 52 | sta address+1 53 | jmp (address) 54 | 55 | backfromheartrou 56 | !1 jsr printcircleofhearts 57 | backfromheartrou1 58 | inx 59 | inx 60 | dec noofhparas 61 | bne doeachheart 62 | endhearts lda htempxreg 63 | add #16 64 | tax 65 | cmp #48 66 | bne morehearts 67 | rts 68 | 69 | ;---------------------------------- 70 | spinandinc dec heartstable+7,x ;rotate ;routine 2 71 | justinc jsr inchearts4 ;routine 4 72 | finhearts1 bne backfromheartrou 73 | finhearts ldy htempxreg 74 | lda #0 75 | sta heartstable,y 76 | sta heartstable+1,y 77 | jmp backfromheartrou1 78 | ;--------------------------------- 79 | largeexpforguard ;routine 6 80 | jsr inchearts4 81 | bpl backfromheartrou 82 | bmi finhearts 83 | ;-------------------------------- 84 | smallexpforguard ;routine 5 85 | jsr inchearts3 86 | lda heartstable+6,x 87 | cmp #64 88 | bcc backfromheartrou 89 | bcs finhearts 90 | ;---------------------------------- 91 | explodehearts ;routine 1 92 | ldy noofhparas 93 | lda expsizetable,y 94 | add heartstable+6,x ;size 95 | sta heartstable+6,x 96 | bcc backfromheartrou 97 | bcs finhearts 98 | expsizetable defb 1,2,3,4,5,6 99 | ;---------------------------------- 100 | spininstars dec heartstable+7,x ;routine 3 101 | lda heartstable+6,x 102 | add #-6 103 | sta heartstable+6,x 104 | jmp finhearts1 105 | ;---------------------------------- 106 | explodeheartsl ;routine 0 107 | dec heartstable+7,x ;rotate 108 | ldy noofhparas 109 | lda robininvinc 110 | cmp #170-50 111 | bcc !1 112 | lda expsizetable,y 113 | add heartstable+6,x ;size 114 | sta heartstable+6,x 115 | jmp backfromheartrou 116 | !1 lda heartstable+6,x ;size 117 | sec 118 | sbc expsizetable,y 119 | sta heartstable+6,x 120 | bmi finhearts 121 | jmp backfromheartrou 122 | ;------------------------------------ 123 | inchearts4 inc heartstable+6,x ;size 124 | inchearts3 inc heartstable+6,x 125 | inchearts2 inc heartstable+6,x 126 | inchearts1 inc heartstable+6,x 127 | rts 128 | ;------------------------------------ 129 | getvalue ;value a=angle 130 | and #63 131 | tay 132 | lda sincostable,y 133 | bit htempangle 134 | bvc waspos 135 | jsr waspos 136 | nega 137 | dey 138 | rts 139 | waspos sta temp 140 | lda htempsize 141 | sta address 142 | ldy #8 143 | lda #0 144 | sta address+1 145 | sta address1 146 | sta address1+1 147 | multlp lsr temp 148 | bcc noadd 149 | add16to16 address1,address,address1 150 | noadd asl address 151 | rol address+1 152 | dey 153 | bne multlp 154 | lda address1+1 155 | rts 156 | ;------------------- 157 | putspinheart 158 | lda htempprty 159 | sta spriteblock+0,y 160 | lda htempchr 161 | sta spriteblock+1,y 162 | lda htempcol 163 | sta spriteblock+2,y 164 | iny 165 | iny 166 | iny 167 | iny 168 | rts 169 | ;------------------- 170 | printcircleofhearts 171 | lda heartstable+6,x 172 | sta htempsize 173 | lda heartstable+7,x 174 | and #127 175 | sta htempangle 176 | jsr getvalue 177 | sty xminus 178 | asl 179 | sta htempx 180 | 181 | lda htempangle 182 | add #32 183 | and #127 184 | sta htempangle 185 | jsr getvalue 186 | sty yminus 187 | asl 188 | sta htempy 189 | ldy spriteblockpointer 190 | bne !29 191 | rts 192 | !29 193 | 194 | ;----- ;bottom right corner of non-rotating 195 | 196 | lda heartxl 197 | add htempx 198 | sta spriteblock+3,y ;htempprtx 199 | lda heartxh 200 | adc xminus 201 | bne !1 202 | 203 | lda hearty 204 | add htempy 205 | sta htempprty 206 | lda #0 207 | adc yminus 208 | bne !1 209 | 210 | jsr putspinheart 211 | beq nomorehearts 212 | !1 213 | ;----- ;top right of non-rotating 214 | lda heartxl 215 | add htempy 216 | sta spriteblock+3,y ;htempprtx 217 | lda heartxh 218 | adc yminus 219 | bne !2 220 | 221 | lda hearty 222 | sec 223 | sbc htempx 224 | sta htempprty 225 | lda #0 226 | sbc xminus 227 | bne !2 228 | 229 | jsr putspinheart 230 | beq nomorehearts 231 | !2 232 | ;-------- ;bottom left of non-rotating 233 | lda heartxl 234 | sec 235 | sbc htempy 236 | sta spriteblock+3,y ;htempprtx 237 | lda heartxh 238 | sbc yminus 239 | bne !3 240 | 241 | lda hearty 242 | add htempx 243 | sta htempprty 244 | lda #0 245 | adc xminus 246 | bne !3 247 | 248 | jsr putspinheart 249 | beq nomorehearts 250 | !3 251 | ;----- ;top left of non-rotating 252 | lda heartxl 253 | sec 254 | sbc htempx 255 | sta spriteblock+3,y ;htempprtx 256 | lda heartxh 257 | sbc xminus 258 | bne !4 259 | 260 | lda hearty 261 | sec 262 | sbc htempy 263 | sta htempprty 264 | lda #0 265 | sbc yminus 266 | bne !4 267 | jsr putspinheart 268 | !4 269 | nomorehearts sty spriteblockpointer 270 | rts 271 | ;------------------- 272 | sincostable db 0 ,3 ,6 ,9 ,12,15,18,21,24,27,30,33,36,38,41,43 273 | db 45,47,49,51,53,55,56,58,59,60,61,62,62,63,63,64,64 274 | db 64,63,63,62,62,61,60,59,58,56,55,53,51,49,47,45 275 | db 43,41,38,36,33,30,27,24,21,18,15,12,9 ,6 ,3 ,0 276 | ;------------ 277 | 278 | exploderoubitsl defb >explodeheartsl,>explodehearts,>spinandinc 279 | defb >spininstars,>justinc,>smallexpforguard,>largeexpforguard 280 | exploderoubitsh defb 19 318 | ERROR "SMILEY TEXT MUST BE 19 BYTES LONG..." 319 | ENDIF 320 | 321 | !SMILEY_BANK = *-1 322 | 323 | ************************************************************* 324 | 325 | 326 | ************************************************************* 327 | 328 | ORG *,* 329 | ORG * 330 | 331 | !GOOD_FACE LDX #$55 332 | LDA #$1A ;green=good 333 | BNE !SHOW_FACE 334 | 335 | !BAD_FACE LDX #$AA 336 | LDA #$16 ;red=bad 337 | 338 | 339 | !SHOW_FACE 340 | ;A=bg col, X= $55 or $aa 341 | 342 | STX !FACE_MASK 343 | 344 | LDX !TEST_BYTE 345 | STX $4400 346 | 347 | ;set palette colours 348 | LDY #$00 349 | STY $2001 350 | 351 | LDX #$3F 352 | STX $2006 353 | STY $2006 354 | 355 | JSR !STORE 356 | 357 | ORA #$30 358 | JSR !STORE 359 | 360 | JSR !STORE 361 | 362 | ;assume Y=0... 363 | 364 | ;download 1 solid character 365 | 366 | STY $2006 367 | STY $2006 368 | 369 | LDX #16 370 | DEY 371 | !1Q STY $2007 372 | DEX 373 | BNE !1Q 374 | 375 | ;print face 376 | LDA #$20 377 | STA $2006 378 | STX $2006 379 | 380 | TXA 381 | LDY #4 382 | 383 | !L1 STA $2007 384 | INX 385 | BNE !L1 386 | DEY 387 | BNE !L1 388 | 389 | 390 | LDA #$23 391 | STA $2006 392 | LDA #$C8 393 | STA $2006 394 | 395 | LDY #0 396 | !L2 LDA !FACE_DATA,Y 397 | AND !FACE_MASK 398 | STA $2007 399 | INY 400 | CPY #48 401 | BCC !L2 402 | 403 | ;screen on, sprites off etc. 404 | LDX #$00 405 | STX $2000 406 | STX $2006 407 | STX $2006 408 | STX $2005 409 | STX $2005 410 | 411 | LDA #$0E 412 | STA $2001 413 | 414 | 415 | ;assume X=0... 416 | 417 | ;wait a few seconds 418 | LDY #10 419 | !WAIT DEC TEMP1 420 | BNE !WAIT 421 | DEX 422 | BNE !WAIT 423 | DEY 424 | BNE !WAIT 425 | 426 | ;screen off 427 | STY $2001 428 | 429 | ;it's a wrap! 430 | RTS 431 | 432 | 433 | 434 | 435 | !STORE STA $2007 436 | STA $2007 437 | STA $2007 438 | STA $2007 439 | RTS 440 | 441 | !FACE_DATA HEX 00C0FCFFFFF00000 442 | HEX 40FF87FFB7CF7300 443 | HEX 44FFFEB7FFFE7700 444 | HEX 44FF07F535CF7700 445 | HEX 00CFF9FAFAFD0300 446 | HEX 00000F0F0F030000 447 | 448 | ************************************************************* 449 | 450 |  451 | 452 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/UNPACK.ROU: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | compactedchrstable 8 | ;>chrdata,cm_chrset,titletopchrs,titlebotchrs,hiscorechrs,hiscorechrs,basechr,beadchr,boxchr,archchr,rockchr,bedchr,doorchr,robinchrs,okchr,INDEX 173 | JSR SEND_BYTE 174 | JSR PORTS_IN 175 | 176 | JMP LOOP 177 | 178 | 179 | WHOLE_SONG 180 | JSR IRQOFF 181 | NEXUS_RAM 182 | ;size of data 183 | JSR GET_BYTE 184 | STA TEMPA 185 | JSR GET_BYTE 186 | STA TEMPA+1 187 | LDA #0 188 | STA TEMPB 189 | STA TEMPB+1 190 | 191 | LDY #0 192 | LOW INDEX 193 | STA TEMPC 194 | HIGH INDEX 195 | STA TEMPC+1 196 | !2 197 | ;get data 198 | JSR GET_BYTE 199 | STA (TEMPC),Y 200 | 201 | INY 202 | BNE !3 203 | INC TEMPC+1 204 | !3 205 | INC TEMPB 206 | BNE !1 207 | INC TEMPB+1 208 | !1 209 | LDA TEMPB 210 | CMP TEMPA 211 | BNE !2 212 | LDA TEMPB+1 213 | CMP TEMPA+1 214 | BNE !2 215 | 216 | NEXUS_ROM 217 | JSR IRQON 218 | JMP LOOP 219 | 220 | PLAY_SONG 221 | JSR IRQOFF 222 | JSR GET_BYTE 223 | JSR START_MUSIC 224 | JSR IRQON 225 | JMP LOOP 226 | SEND_NOTE 227 | JSR IRQOFF 228 | JSR IRQON 229 | JMP LOOP 230 | 231 | 232 | 233 | IRQOFF LDA STATUS0 234 | AND #63 ;127 ;HMMMMMM....... 235 | STA STATUS0 236 | STA _STATUS0 237 | RTS 238 | 239 | IRQON LDA STATUS0 240 | ORA #128 241 | STA STATUS0 242 | STA _STATUS0 243 | RTS 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | ;jons bit.... 255 | ************************************************************************** 256 | CMP #$37 257 | ;BNE LOOP 258 | 259 | ;make some noise 260 | 261 | NEXUS_RAM 262 | 263 | ;channel 264 | JSR GET_BYTE 265 | TAY 266 | 267 | LDA #$FF 268 | STA VOICE,Y 269 | STA OLD_FREQHI,Y 270 | 271 | ;envelope start, attack, peak, decay, sustain 272 | 273 | JSR GET_BYTE 274 | STA VOLUME,Y 275 | 276 | JSR GET_BYTE 277 | STA ATTACK 278 | JSR GET_BYTE 279 | STA PEAK 280 | JSR GET_BYTE 281 | STA DECAY 282 | JSR GET_BYTE 283 | STA SUSTAIN 284 | 285 | ;reverb 286 | JSR GET_BYTE 287 | STA REVERB_MAX 288 | 289 | ;tinnytone start, delay, end 290 | 291 | JSR GET_BYTE 292 | STA TINNY_TONE,Y 293 | 294 | JSR GET_BYTE 295 | STA TINNY_DELAY 296 | STA TINNY_WAIT,Y 297 | 298 | JSR GET_BYTE 299 | STA TINNY_END 300 | 301 | ;pitch 302 | JSR GET_BYTE 303 | TAX 304 | 305 | LDA TABLO,X 306 | STA FREQ_LO,Y 307 | LDA TABHI,X 308 | STA FREQ_HI,Y 309 | 310 | ;duration 311 | JSR GET_BYTE 312 | STA DURATION,Y 313 | 314 | ; 315 | 316 | LDA #0 317 | STA REVERB_COUNT,Y 318 | STA ENV_PHASE,Y 319 | 320 | STA VOICE,Y 321 | 322 | NEXUS_ROM 323 | 324 | ;next 325 | JMP LOOP 326 | 327 | ;end of jons bit.... 328 | ************************************************************************** 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | ;** NMI ** 338 | 339 | NMI PHA 340 | TXA 341 | PHA 342 | TYA 343 | PHA 344 | 345 | INC gav_COUNTER 346 | 347 | LDY #4 348 | LDX #0 349 | !2 DEX 350 | BNE !2 351 | DEY 352 | BNE !2 353 | 354 | BWON 355 | 356 | SETBANK 0 357 | JSR $8004 358 | 359 | BWOFF 360 | 361 | ;;;JSR TESTPDS 362 | 363 | LDA $2002 364 | 365 | PLA 366 | TAY 367 | PLA 368 | TAX 369 | PLA 370 | 371 | RTI 372 | 373 | 374 | CHANNEL_ADR HEX 0004080C 375 | 376 | TINNY_TABLE HEX 3070B070 377 | 378 | 379 | 380 | ;***** PDS link ***** 381 | 382 | ;** get byte ** 383 | 384 | GET_BYTE 385 | !WAIT LDA $C002 386 | EOR PDS_FLAGS 387 | AND #2 388 | BEQ !WAIT 389 | 390 | LDX $C000 391 | LDA PDS_FLAGS 392 | EOR #3 393 | STA $C002 394 | STA PDS_FLAGS 395 | TXA 396 | RTS 397 | 398 | 399 | ;** send byte ** 400 | 401 | SEND_BYTE 402 | STA $C000 403 | LDA PDS_FLAGS 404 | EOR #3 405 | STA $C002 406 | STA PDS_FLAGS 407 | 408 | !WAIT LDA $C002 409 | EOR PDS_FLAGS 410 | AND #2 411 | BNE !WAIT 412 | 413 | RTS 414 | 415 | 416 | ;** swap ports to out ** 417 | 418 | PORTS_OUT 419 | !WAIT LDA $C002 420 | EOR PDS_FLAGS 421 | AND #2 422 | BEQ !WAIT 423 | 424 | LDA PDS_FLAGS 425 | EOR #2 426 | STA PDS_FLAGS 427 | 428 | LDA $C003 429 | ORA #$10 430 | STA $C003 431 | 432 | RTS 433 | 434 | 435 | ;** swap ports to in ** 436 | 437 | PORTS_IN 438 | LDA $C003 439 | AND #$EF 440 | STA $C003 441 | 442 | LDA PDS_FLAGS 443 | EOR #1 444 | STA $C002 445 | STA PDS_FLAGS 446 | 447 | RTS 448 | 449 | 450 | 451 | ;***** music stuff ***** 452 | 453 | 454 | ;** update channel ** 455 | 456 | UPDATE 457 | ;X=channel (0..3) 458 | 459 | ;* abort if voice=$ff * 460 | 461 | LDA VOICE,X 462 | BPL !OK 463 | 464 | RTS 465 | !OK 466 | 467 | ;* update duration * 468 | DEC DURATION,X 469 | BNE !4 470 | 471 | LDY CHANNEL_ADR,X 472 | 473 | LDA #$30 474 | STA $4000,Y 475 | LDA #$FF 476 | STA VOICE,X 477 | 478 | RTS 479 | !4 480 | 481 | ;* voice index into Y * 482 | 483 | LDY VOICE,X 484 | 485 | ;* update envelope * 486 | 487 | LDA ENV_PHASE,X 488 | BEQ !ATTACK 489 | 490 | LSR 491 | BCC !SUSTAIN 492 | 493 | ;decay 494 | LDA VOLUME,X 495 | SEC 496 | SBC DECAY,Y 497 | BCC !50 498 | 499 | CMP SUSTAIN,Y 500 | BCS !VOL 501 | 502 | !50 503 | LDA SUSTAIN,Y 504 | JMP !PHASE 505 | 506 | ;attack 507 | !ATTACK 508 | LDA VOLUME,X 509 | CLC 510 | ADC ATTACK,Y 511 | BCS !60 512 | 513 | CMP PEAK,Y 514 | BCC !VOL 515 | !60 516 | LDA PEAK,Y 517 | 518 | !PHASE INC ENV_PHASE,X 519 | !VOL STA VOLUME,X 520 | 521 | ;done vol 522 | 523 | !SUSTAIN 524 | 525 | 526 | ;* update tinnytone * 527 | 528 | ;count frames between tinny update 529 | 530 | LDA TINNY_DELAY,Y 531 | BEQ !51 532 | DEC TINNY_WAIT,X 533 | BPL !TINNYDONE 534 | STA TINNY_WAIT,X 535 | !51 536 | 537 | ;inc tinny_tone if not at tinny_end 538 | 539 | LDA TINNY_TONE,X 540 | CMP TINNY_END,Y 541 | BEQ !TINNYDONE 542 | 543 | CLC 544 | ADC #1 545 | AND #3 546 | STA TINNY_TONE,X 547 | 548 | ;leave tinny be 549 | 550 | !TINNYDONE 551 | 552 | ;* update reverb * 553 | 554 | DEC REVERB_COUNT,X 555 | BPL !81 556 | LDA REVERB_MAX,Y 557 | STA REVERB_COUNT,X 558 | !81 559 | 560 | 561 | ;* put it all together * 562 | 563 | ;volume 564 | LDA VOLUME,X 565 | LSR 566 | LSR 567 | LSR 568 | LSR 569 | 570 | STA TEMP1 571 | 572 | ;reverb mask 573 | 574 | LDA REVERB_COUNT,X 575 | ASL 576 | CMP REVERB_MAX,Y 577 | 578 | LDA TEMP1 579 | BCS !RV_ON 580 | AND #$F0 581 | !RV_ON 582 | 583 | ;tinnytone 584 | LDY TINNY_TONE,X 585 | ORA TINNY_TABLE,Y 586 | 587 | ;store reg 0 588 | 589 | LDY CHANNEL_ADR,X 590 | 591 | STA $4000,Y 592 | 593 | ;pitch (regs 2 & 3) 594 | 595 | LDA FREQ_LO,X 596 | STA $4002,Y 597 | 598 | LDA FREQ_HI,X 599 | CMP OLD_FREQHI,X 600 | BEQ !300 601 | 602 | STA $4003,Y 603 | STA OLD_FREQHI,X 604 | !300 605 | 606 | ;* done * 607 | 608 | RTS 609 | 610 | 611 | ;** voice data ** 612 | 613 | REVERB_MAX DJ 53 614 | TINNY_END DJ 53 615 | TINNY_DELAY DJ 53 616 | 617 | ATTACK DJ 53 618 | DECAY DJ 53 619 | PEAK DJ 53 620 | SUSTAIN DJ 53 621 | 622 | 623 | ENDIF 624 | endif 625 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/SPRITESD.DAT: -------------------------------------------------------------------------------- 1 | 2 | 3 | spritetable ;;defw pointers to spritedefs 256 max 4 | sprvar robinheads 5 | defw head0,head1,head2,head3 6 | sprvar robinbodies 7 | defw robinbody0,robinbody1,robinbody2,robinbody3 8 | defw robinbody4,robinbody5,robinbody6,robinbody3 9 | sprvar bodyfiring 10 | defw robinstanding,bodyfire0,bodyfire1,bodyfire2,bodyfire3 11 | sprvar legsrunning 12 | defw legsrunning0,legsrunning1,legsrunning2,legsrunning3 13 | defw legsrunning4,legsrunning5,legsrunning6,legsrunning3 14 | sprvar morelegs 15 | defw legsstanding,legshalfcrouch,bodyfullcrouch,legsfullcrouch,legsjumping 16 | defw bodyonladder,legsonladder 17 | sprvar barrels 18 | defw barrel0,barrel1,barrel2,barrel1 19 | ; sprvar balls 20 | ; defw steelball,spikedball 21 | sprvar canon 22 | defw canons 23 | sprvar platform 24 | defw platformspr 25 | sprvar titlelogos 26 | defw codemasterlogo,camericalogo,pressstart 27 | sprvar deadarrows 28 | defw deadarrow1,deadarrow2,deadarrow3,deadarrow4 29 | sprvar trampet 30 | defw trampet1,trampet2 31 | ; sprvar key 32 | ; defw keyspr 33 | sprvar spider 34 | defw spiderspr,spiderspr1 35 | sprvar bat 36 | defw bat1,bat2 37 | sprvar eyes 38 | defw eye1,eye2,eye3,eye4 39 | ; sprvar rat 40 | ; defw rat1,rat2 41 | sprvar guard 42 | defw guardlow,guardhigh,guardlow1,guardhigh1 43 | ; sprvar treasure 44 | ; defw chest,crown,diamond,shield,goblet,ruby,duffchest 45 | sprvar fire 46 | defw fire1,fire2,fire3,fire4,fire5 47 | sprvar marion 48 | defw marions 49 | sprvar pausespr 50 | defw pauses 51 | 52 | 53 | spritedefs ;;no. of paras, X dis,Y dis,pallette/flip,frmlo,frmhi 54 | ;;no of paras, pallette/flip ,X ,Y ,frmlo ,frmhi 55 | ;;N.B. to make more efficent data pallette/flip byte holds extra stuff 56 | ;; 0 0 0 0 0 0 0 0 57 | ; vert hor X/Y dis point to 2x2 spr pallette pallette 58 | ; chr, not start from 59 | ; lo,hi spr chr 60 | 61 | 62 | 63 | codemasterlogo 64 | defb 7,%00000000, >cmdata0,cmdata1,cmdata2,cmdata3,cmdata4,cmdata5,camdata0,camdata1,psdata,psdata1,body0data,body1data,body2data,body5data,robstanddata,bodyfire0data0,bodyfire0data1,bodyfire0data2,bodyfire1data,bodyfire2data,bodyfire3data,legsrunning0data0,legsrunning0data1,legsrunning1data,legsrunning3data,legsrunning4data0,legsrunning4data1,legsrunning5data,legsrunning6data,legshalfcrouchdata0,legshalfcrouchdata1,bodyfullcrouchdata,legsfullcrouchdata,legsjumpdata,legsladderdata,canondata,platdata,spider1,spider1,spider2,spider2,guardbody,guardbody1,guardbody2,guardbody3,marion1,marion2,marion3,sprchrs 140 | sta address1 141 | lda #sprchrs 369 | sta address1 370 | lda #(&fe*16+&1008) 551 | sta vrambuffer+1,y 552 | lda #2 553 | sta vrambuffer+2,y 554 | lda waterchrs,x 555 | sta vrambuffer+3,y 556 | lda waterchrs+1,x 557 | sta vrambuffer+4,y 558 | 559 | lda counter 560 | lsr 561 | and #%00000110 562 | tax 563 | 564 | lda #<(&ff*16+&1000) 565 | sta vrambuffer+5,y 566 | lda #>(&ff*16+&1000) 567 | sta vrambuffer+6,y 568 | lda #2 569 | sta vrambuffer+7,y 570 | lda waterchrs+8,x 571 | sta vrambuffer+8,y 572 | lda waterchrs+9,x 573 | sta vrambuffer+9,y 574 | 575 | lda #<(&ff*16+&1008) 576 | sta vrambuffer+10,y 577 | lda #>(&ff*16+&1008) 578 | sta vrambuffer+11,y 579 | lda #2 580 | sta vrambuffer+12,y 581 | lda waterchrs+8,x 582 | sta vrambuffer+13,y 583 | lda waterchrs+9,x 584 | sta vrambuffer+14,y 585 | tya 586 | add #15 587 | sta vrampointer 588 | 589 | !1 rts 590 | ;-------------------------------- 591 | 592 | secrettable defw secret0,secret1,secret2,secret3,secret4 593 | defw secret5,secret6,secret7,secret8,secret9 594 | defw secret10,secret11,secret12,secret13 595 | defw secret14,secret15,secret16,secret17 596 | defw secret18,secret19,secret20,secret21 597 | defw secret22,secret23 598 | 599 | secret0 defb 5-1 ,38 , 6,&20,255 ;poke ladder 600 | secret1 defb 5-1 ,4 ,10,&00,5-1,4,11,&00,255 ;poke hole in shaft 601 | secret2 defb 8-1 ,153,12,&ad,8-1,154,12,&ab,255 ;slide under ledge 602 | secret3 defb 7-1 ,174,8 ,&f8,255 ;under ladder 603 | secret4 defb 11-2,10 ,11,&00,11-2,11,11,&00 604 | defb 11-2,10 ,12,&00,11-2,11,12,&00,255 ;bash thru castle turret 605 | secret5 defb 8-1 ,102,0 ,&20,8-1 ,102,1,&20 606 | defb 8-1 ,102,2 ,&20,8-1 ,102,3,&ad,255 ;ladder down 607 | secret6 defb 12-2,22,12 ,&20,12-2,22,13,&20,255 ;make ladder 608 | secret7 defb 5-1 ,189,4 ,&4a,5-1,190,4,&49,255 ;trap door 609 | secret8 defb 2-1 ,25 ,4,&20,2-1 ,25 ,5,&20,2-1 ,25 ,6,&20 610 | defb 2-1 ,25 ,7,&20,2-1 ,25 ,8,&20,2-1 ,25 ,9,&20,255 ;ladder ext 611 | secret9 defb 6-1 ,113,0,&24,255 ;opens chain 612 | secret10 defb 1-1 ,2 ,7,&20,1-1 ,2 ,6,&20,1-1,2,5,&20,1-1,2,4,&20,1-1,2,3,&20 613 | defb 1-1 ,2 ,2,&20,1-1,2,1,&20,1-1,2,0,&20,255 ;ladder in wall 614 | secret11 defb 6-1 ,119,6,&00,6-1,119,7,&00,255 ;knock out wall by ladder 615 | secret12 defb 9-1 ,25,12,&11,9-1,36,10,&2b,255 ;moving stool 616 | secret13 defb 8-1 ,7 ,12,&ad,255 ;get imposible heart 617 | secret14 defb 6-1 ,35,12,&00,6-1,36,12,&00,6-1,37,12,&00,255 ;first cheat 618 | secret15 defb 5-1 ,2,2,&4,255 ;knock out ball and chain 619 | secret16 defb 5-1 ,38,12,&20,5-1,38,11,&20,5-1,37,12,&4b,255 ;ladder grow down 620 | secret17 defb 7-1 ,16,11,&4b,7-1,16,12,&49,255 ;remove wall 621 | secret18 defb 7-1 ,40,10,&49,7-1,41,10,&49,7-1,42,10,&49,255 ;knock out slide 622 | secret19 defb 7-1 ,133,7,&20,7-1,133,8,&20,255 ;grow down ladder 623 | secret20 defb 11-2,14,8,&f8,255 ;block infront of guard 624 | secret21 defb 8-1,150,5,&ab,255 ;drop floor away 625 | secret22 defb 6-1,1,11,0,6-1,2,11,0,6-1,1,12,0,6-1,2,12,0,255 ;cheat at beginning 626 | 627 | secret23 defb 6-1,138,12,&25,6-1,138,11,&25,255 ;barrels 628 | defb 255 629 | 630 | 631 | 632 | 633 |  -------------------------------------------------------------------------------- /super-robin-hood-nes-source-code/MAPSCROL.ROU: -------------------------------------------------------------------------------- 1 | 2 | addrightedge equ 18 3 | attributemasks defb %11111100,%11110011,%11001111,%00111111 4 | attributeands defb %00000000,%00000000,%00000000,%00000000 5 | defb %00000001,%00000100,%00010000,%01000000 6 | defb %00000010,%00001000,%00100000,%10000000 7 | defb %00000011,%00001100,%00110000,%11000000 8 | ;-------------------------------------- 9 | setxscroll 10 | move.w scrxl,address2 11 | 12 | lda robinxl 13 | sec 14 | sbc #120 15 | sta address2 16 | lda robinxh 17 | sbc #0 18 | cmp #255 19 | bne !1 20 | lda #0 21 | sta address2 22 | !1 sta address2+1 23 | 24 | lda address2+1 25 | sta temp 26 | lda address2 27 | lsr temp 28 | ror 29 | lsr temp 30 | ror 31 | lsr temp 32 | ror 33 | lsr temp 34 | ror 35 | sta mapstrip 36 | cmp #0 ;minmap 37 | bcc mapnotmoved 38 | cmp maxmap 39 | bcc printmapdownside 40 | lda maxmap 41 | sta mapstrip 42 | ldx #0 43 | stx address2+1 44 | asl 45 | rol address2+1 46 | asl 47 | rol address2+1 48 | asl 49 | rol address2+1 50 | asl 51 | rol address2+1 52 | sta address2 53 | !2 54 | 55 | printmapdownside 56 | cphlde scrxl,address2 57 | beq mapnotmoved 58 | bcs decmapset 59 | printmapdownside1 60 | ldx #255 61 | incr scrxl 62 | jmp setmapset 63 | decmapset decr scrxl 64 | ldx #0 65 | setmapset stx scrolldir 66 | 67 | lda scrxh 68 | sta temp 69 | lda scrxl 70 | lsr temp 71 | ror 72 | lsr temp 73 | ror 74 | lsr temp 75 | ror 76 | lsr temp 77 | ror 78 | sta mapstrip 79 | jsr bringonmap 80 | lda interon 81 | bne printmapdownside 82 | jsr emptyblockbuffer 83 | jmp printmapdownside 84 | mapnotmoved 85 | !1 lsr control0 86 | lda scrxl 87 | add #16 88 | sta x.scroll 89 | lda scrxh 90 | adc #0 91 | lsr 92 | rol control0 93 | rts 94 | ;-------------------------------------- 95 | times14tablelo 96 | xx = 0 97 | do 256 98 | defb >xx 99 | xx = xx+14 100 | loop 101 | times14tablehi 102 | xx = 0 103 | do 256 104 | defb xx/256 105 | xx = xx+14 106 | loop 107 | ;--------------------------------------- 108 | findsolid ;a=xl x=xh y=y all pixels 109 | ;destroys all 110 | ;sets nz if solid 111 | !1 cpy #14*16 112 | bcc !2 113 | pha 114 | lda robiny 115 | bpl !3 116 | tya 117 | add #-16 118 | tay 119 | pla 120 | jmp !1 121 | !3 tya 122 | add #16 123 | tay 124 | pla 125 | jmp !1 126 | !2 jsr findblock 127 | tax 128 | lda #0 129 | lsr temp ;y 130 | rol 131 | lsr temp1 ;x 132 | rol 133 | tay 134 | lda solidchrs,x 135 | and solidchrmasks,y 136 | dey 137 | beq shifts4 138 | dey 139 | beq shifts2 140 | dey 141 | beq shifts0 142 | shifts6 lsr 143 | lsr 144 | shifts4 lsr 145 | lsr 146 | shifts2 lsr 147 | lsr 148 | shifts0 sta solidfound 149 | cmp #0 150 | rts 151 | 152 | solidchrmasks defb 128+64,32+16,8+4,2+1 153 | ;--------------------------------------- 154 | findblock ;a=xl x=xh y=y all pixels 155 | stx temp 156 | lsr temp 157 | ror 158 | lsr temp 159 | ror 160 | lsr temp 161 | ror 162 | lsr temp 163 | ror 164 | tax ;x=strip x 165 | rol temp1 ;which chr 166 | 167 | lda mappointer 168 | add times14tablelo+1,x 169 | sta address 170 | lda mappointer+1 171 | adc times14tablehi+1,x 172 | sta address+1 173 | tya 174 | lsr 175 | lsr 176 | lsr 177 | lsr 178 | tay 179 | rol temp 180 | lda (address),y ;gets block num 181 | sta blockfound 182 | stx blockx 183 | sty blocky 184 | jsr checkchangedblock 185 | lda blockfound 186 | rts 187 | ;-------------------------------------- 188 | findchr ;a=xl x=xh y=y all pixels 189 | jsr findblock 190 | ;------- 191 | findchrpart ;used by find chr 192 | tay 193 | lsr temp 194 | bcs bottompart 195 | lsr temp1 196 | bcs rightside 197 | lda blkstl,y 198 | sta chrfound 199 | rts 200 | rightside lda blkstr,y 201 | sta chrfound 202 | rts 203 | bottompart lsr temp1 204 | bcs rightside1 205 | lda blksbl,y 206 | sta chrfound 207 | rts 208 | rightside1 lda blksbr,y 209 | sta chrfound 210 | noblocksneeded 211 | rts 212 | ;----------------------------------------- 213 | bringonmap lda scrxl 214 | and #15 215 | cmp #14 216 | bcs noblocksneeded 217 | tay 218 | sta blocky 219 | ldx mapstrip 220 | bit scrolldir 221 | bpl !1 222 | txa 223 | add #addrightedge 224 | sta blockx 225 | tax 226 | !1 stx blockx 227 | 228 | jsr getblockbit 229 | sta address9 230 | tay 231 | lda blockrous,y 232 | ldy blocky 233 | cmp #0 234 | bpl !3 235 | dex 236 | jsr getblockbit 237 | !3 jsr checkchangedblock1 238 | lda blockfound 239 | jsr printblocktoscreen 240 | jmp checkaddflamesetc 241 | ;----------------------------------------- 242 | getblockbit 243 | lda mappointer 244 | add times14tablelo,x 245 | sta address 246 | lda mappointer+1 247 | adc times14tablehi,x 248 | sta address+1 249 | lda (address),y 250 | sta blockfound 251 | rts 252 | ;----------------------------------------- 253 | checkchangedblock ;given x,y coords changes blockfound if it is in table 254 | inc blockx 255 | checkchangedblock1 256 | ldx changedblockspointer 257 | beq !3 258 | ldx #0 259 | !1 lda blockx 260 | cmp changedblocks,x 261 | bne !2 262 | lda changedblocks+1,x 263 | cmp blocky 264 | bne !2 265 | lda changedblocks+2,x 266 | sta blockfound 267 | ldx blockx 268 | rts 269 | !2 inx 270 | inx 271 | inx 272 | cpx changedblockspointer 273 | bne !1 274 | !3 ldx blockx 275 | rts 276 | ;----------------------------------------- 277 | addachangedblock ;given x,y,a it checks it does not already exist and 278 | ; puts it into the table and prints 279 | stx toplevvar1 280 | sty toplevvar2 281 | sta toplevvar3 282 | addachangedblock1 283 | lda #3 284 | ldx changedblockspointer 285 | beq !1 286 | 287 | ldx #0 288 | !2 lda changedblocks+0,x 289 | cmp toplevvar1 290 | bne !3 291 | lda changedblocks+1,x 292 | cmp toplevvar2 293 | bne !3 294 | lda #0 295 | beq !1 296 | !3 inx 297 | inx 298 | inx 299 | cpx changedblockspointer 300 | bne !2 301 | lda #3 302 | 303 | !1 add changedblockspointer 304 | sta changedblockspointer 305 | cmp #3*maxchangedblocks 306 | bne !8 307 | testcrash 308 | !8 lda toplevvar2 309 | sta changedblocks+1,x 310 | lda toplevvar1 311 | sta changedblocks+0,x 312 | lda toplevvar3 313 | sta changedblocks+2,x 314 | ldx toplevvar1 315 | bit interon 316 | bpl !4 317 | ldy toplevvar2 318 | jmp printblocktoscreencheck 319 | !4 rts 320 | ;----------------------------------------- 321 | deleteachangedblock ;given x,y ;deletes from the table and prints back 322 | ;the background 323 | stx toplevvar1 324 | sty toplevvar2 325 | deleteachangedblock1 326 | lda changedblockspointer 327 | beq !4 328 | ldx #0 329 | !1 lda changedblocks+0,x 330 | cmp toplevvar1 331 | bne !2 332 | lda changedblocks+1,x 333 | cmp toplevvar2 334 | bne !2 335 | 336 | !3 lda changedblocks+3,x 337 | sta changedblocks+0,x 338 | inx 339 | cpx changedblockspointer 340 | bne !3 341 | txa 342 | add #-3 343 | sta changedblockspointer 344 | ldx toplevvar1 345 | lda mappointer 346 | add times14tablelo,x 347 | sta address 348 | lda mappointer+1 349 | adc times14tablehi,x 350 | sta address+1 351 | ldy toplevvar2 352 | lda (address),y ;gets block num 353 | jmp printblocktoscreencheck 354 | !2 inx 355 | inx 356 | inx 357 | cpx changedblockspointer 358 | bne !1 359 | !5 ldx toplevvar1 360 | !4 rts 361 | ;----------------------------------------- 362 | blocknotonscreen 363 | rts 364 | printblocktoscreencheck ;x,y,a 365 | stx blockx 366 | sty blocky 367 | sta blockfound 368 | txa 369 | sec 370 | sbc mapstrip 371 | bmi blocknotonscreen 372 | cmp #addrightedge+1 373 | bcs blocknotonscreen 374 | printblocktoscreen 375 | ldy blocky 376 | lda blockx 377 | lsr 378 | and #15 379 | cmp #8 380 | bcc !1 381 | add #7*8-8 382 | !1 add attrytable,y 383 | sta attripointer 384 | ;-------------------- 385 | !12 ldx blockpointer 386 | 387 | cpx #11*numberofblocks 388 | bne !11 389 | lda #0 390 | sta filledblockbuffer 391 | flybackvar 392 | lda #1 393 | sta filledblockbuffer 394 | jmp !12 395 | 396 | !11 397 | ldy blockfound 398 | lda blkstl,y 399 | sta blockbuffer+2,x 400 | lda blkstr,y 401 | sta blockbuffer+3,x 402 | lda blksbl,y 403 | sta blockbuffer+6,x 404 | lda blksbr,y 405 | sta blockbuffer+7,x 406 | lda blksattr,y 407 | sta blockattri 408 | 409 | lda blockx 410 | lsr 411 | lda blocky 412 | rol 413 | and #3 414 | tay 415 | 416 | add blockattri 417 | sta blockattri 418 | ldx attripointer 419 | lda attributes,x 420 | and attributemasks,y 421 | ldy blockattri 422 | ora attributeands,y 423 | sta attributes,x 424 | 425 | ldx blockpointer 426 | sta blockbuffer+10,x 427 | txa 428 | add #11 429 | sta blockpointer 430 | lda blockx 431 | and #%00011111 432 | asl 433 | sta temp 434 | and #&20 435 | beq !3 436 | add #-&20+4 437 | !3 sta temp1 ;hi vram addr 438 | ldy blocky 439 | lda temp 440 | and #31 441 | add times32tablelo,y 442 | sta blockbuffer+1,x 443 | lda temp1 444 | adc times32tablehi,y 445 | sta blockbuffer+0,x 446 | 447 | lda blockbuffer+1,x 448 | add #32 449 | sta blockbuffer+5,x 450 | lda blockbuffer+0,x 451 | adc #0 452 | sta blockbuffer+4,x 453 | !2 454 | 455 | nowattri ldy #&23 456 | lda attripointer 457 | cmp #8*7 458 | bcc !1 459 | sec 460 | sbc #8*7 461 | iny 462 | iny 463 | iny 464 | iny 465 | !1 add #&c0 466 | sta blockbuffer+9,x 467 | tya 468 | sta blockbuffer+8,x 469 | 470 | rts 471 | 472 | attrytable defb 0,0,8,8,16,16,24,24,32,32,40,40,48,48,56,56 473 | ;----------------------------------------------- 474 | gointonewmap ;a=mapnumber 475 | lda mapno 476 | asl 477 | asl 478 | add mapno 479 | add mapno 480 | tax 481 | lda mapinfo,x 482 | sta mappointer 483 | lda mapinfo+1,x 484 | sta mappointer+1 485 | stx temp1 486 | 487 | lda interon 488 | beq internoton 489 | jsr turninterofffade 490 | 491 | internoton 492 | jsr setfade 493 | ldx temp1 494 | 495 | 496 | ldy #0 497 | lda minmap 498 | cmp mapinfo+2,x 499 | bcs !9 500 | ldy #255 501 | !9 502 | sec 503 | sbc mapinfo+2,x 504 | !1 sty address+1 505 | do 4 506 | asl 507 | rol address+1 508 | loop 509 | add robinxl 510 | sta robinxl 511 | lda address+1 512 | adc robinxh 513 | sta robinxh 514 | 515 | lda mapinfo+2,x 516 | sta minmap 517 | lda mapinfo+3,x 518 | add #-16 519 | sta maxmap 520 | add16toval robinxl,256+32,scrxl 521 | 522 | stx temp 523 | ldy mapinfo+4,x 524 | ldx #0 525 | !2 lda gamepallettes,y 526 | sta fadecolours,x 527 | lda spritecolours,x 528 | sta fadecolours+16,x 529 | iny 530 | inx 531 | cpx #16 532 | bne !2 533 | 534 | 535 | ldx temp 536 | lda mapinfo+5,x 537 | 538 | tax 539 | makeupchrset stx hipos 540 | lda mapchrsdefs,x 541 | bmi nomorechrsformap 542 | jsr copyblockofcompactedchrs 543 | ldx hipos 544 | inx 545 | jmp makeupchrset 546 | nomorechrsformap 547 | 548 | 549 | 550 | lda #0 551 | sta counter 552 | sta animatedoor 553 | sta changedblockspointer 554 | jsr resetdoorsintomap 555 | jsr doallsecrets 556 | jsr resetextravars 557 | jsr storeoutoldrobin 558 | 559 | jsr setxscroll 560 | lda robinxl 561 | sec 562 | sbc scrxl 563 | sta robinonscrx 564 | 565 | ldx mapno 566 | lda tuneforstrip,x 567 | cmp tune 568 | beq playingsametune 569 | jsr starttune 570 | playingsametune 571 | 572 | lda #&ef-12 573 | sta y.scroll 574 | jmp turninteron 575 | ;------------------------------------- 576 | checkoffscreen 577 | ldx mapno 578 | lda mapheights,x 579 | sta temp 580 | lda killed 581 | bne !1 582 | lda robiny 583 | sta temp8 584 | cmp #&20 585 | bcc goingofftop 586 | cmp #&d8 587 | bcc !1 588 | cmp #&f0 589 | bcs goingoffbottom 590 | jsr setonladdervars 591 | !1 rts 592 | goingofftop 593 | lda robiny 594 | add #&d0 595 | sta robiny 596 | inc temp 597 | bne changingscreen 598 | goingoffbottom 599 | lda robiny 600 | sec 601 | sbc #&d0 602 | sta robiny 603 | dec temp 604 | changingscreen 605 | lda mapno 606 | asl 607 | asl 608 | add mapno 609 | add mapno 610 | tay 611 | ldx mapinfo+2,y 612 | lda robinxl 613 | add times16lo,x 614 | sta address 615 | lda robinxh 616 | adc times16hi,x 617 | sta address+1 618 | 619 | ldx #12 620 | stx temp9 621 | doeachmap lda mapheights,x 622 | cmp temp 623 | beq possiblemap 624 | trynextmap dec temp9 625 | ldx temp9 626 | bpl doeachmap 627 | 628 | lda temp8 ;robin jumping of top off screen/or bottom 629 | cmp #8 630 | bcs !1 631 | lda #8 632 | bne !2 633 | !1 cmp #&f8 634 | bcc !2 635 | lda &f7 636 | !2 sta robiny 637 | rts 638 | 639 | 640 | possiblemap txa 641 | asl 642 | asl 643 | add temp9 644 | add temp9 645 | tay 646 | ldx mapinfo+2,y 647 | lda times16hi,x 648 | cmp address+1 649 | bne !1 650 | lda times16lo,x 651 | cmp address 652 | !1 bcs trynextmap 653 | lda mapinfo+2,y 654 | add mapinfo+3,y 655 | tax 656 | lda times16hi,x 657 | cmp address+1 658 | bne !2 659 | lda times16lo,x 660 | cmp address 661 | !2 bcc trynextmap 662 | 663 | jsr setonladdervars 664 | 665 | lda #0 666 | sta voice1 667 | sta voice2 668 | sta voice3 669 | sta voice4 670 | 671 | 672 | lda temp9 673 | sta mapno 674 | jmp gointonewmap 675 | ;------------------------------------- 676 |  677 | 678 | mapinfo ;mappointer ,offset,width,paletteused,chrsused 679 | ; defb >mapa-14,mapb-14,mapc-14,mapd-14,mape-14,mapf-14,mapg-14,maph-14,mapi-14,mapj-14,mapk-14,mapl-14,mapm-14,mapn-14,mapo-14,mapp-14,minx,maxx,x,&ff 28 | ERROR "Out of zero page work space with variable @1 29 | endif 30 | endm 31 | zlim = &0 32 | 33 | 34 | var macro 35 | @1 equ varlim 36 | varlim = varlim+@2 37 | if varlim>&743 38 | ERROR "Out of var page work space with variable @1 39 | endif 40 | endm 41 | 42 | varlim = &300 43 | 44 | ;--------------------------------------------------------------- 45 | defspr macro 46 | if (@1&32) 47 | db @1,(@2)*((@1&64~64)/32-1),(@3)*((@1&128~128)/64-1),@4 48 | ifs [@5] [] 49 | else 50 | db @5 51 | endif 52 | else 53 | db @1,@2 54 | ifs [@3] [] 55 | else 56 | db @3 57 | endif 58 | endif 59 | endm 60 | 61 | sprvar macro 62 | @1 equ (*-spritetable)/2 63 | endm 64 | ;--------------------------------------------------------------- 65 | chrvar macro 66 | @1 equ (*-setsofchrstable)/5 67 | endm 68 | ;---------------------------------------------------------------- 69 | compchr macro 70 | @1 equ (*-compactedchrstable)/4 71 | endm 72 | ;---------------------------------------------------------------- 73 | waitforsprcol macro ;waits for sprite collision with sprite & char 74 | !2 bit _statusreg 75 | bvs !2 76 | !1 bit _statusreg 77 | bvc !1 78 | endm 79 | ;--------------------------------------------------------------- 80 | waitforedge macro ;waits for horizontal edge border 81 | !1 lda _spritedata 82 | cmp #255 83 | beq !1 84 | endm 85 | ;--------------------------------------------------------------- 86 | waitforninesprs macro ;waits for nine sprites on a line 87 | ldx #8 88 | lda #%00100000 89 | !1 bit _statusreg 90 | beq !1 91 | dex 92 | bne !1 93 | endm 94 | ;--------------------------------------------------------------- 95 | flyback macro 96 | !1 ldX _statusreg 97 | bpl !1 98 | endm 99 | ;-------------------------------------------------------------- 100 | blackscreen macro 101 | ldy #60 102 | !1 ldX _statusreg 103 | bpl !1 104 | dey 105 | bne !1 106 | endm 107 | ;--------------------------------------------------------------- 108 | orgfullpage macro 109 | !1 org (!1/256)*256+256 110 | endm 111 | 112 | ;--------------------------------------------------------------- 113 | flybackvar macro 114 | asl flyflag 115 | !1 bit flyflag 116 | bpl !1 117 | endm 118 | ;--------------------------------------------------------------- 119 | addto16 macro ;;;address,amount 120 | lda @1 121 | clc 122 | adc #@2 123 | sta @1 124 | bcc !1 125 | inc @1+1 126 | !1 endm 127 | ;--------------------------------------------------------------- 128 | deca macro ;;;dec a 129 | sec 130 | sbc #1 131 | endm 132 | ;--------------------------------------------------------------- 133 | inca macro ;;inc a 134 | clc 135 | adc #1 136 | endm 137 | ;--------------------------------------------------------------- 138 | nega macro 139 | eor #255 140 | clc 141 | adc #1 142 | endm 143 | ;--------------------------------------------------------------- 144 | blackandwhite macro 145 | php 146 | pha 147 | lda control1 148 | and #%00011110 ;;;BACK AND WHITE MODE 149 | clc 150 | adc #1 151 | sta _control1 152 | pla 153 | plp 154 | endm 155 | ;--------------------------------------------------------------- 156 | colour macro ;9 tstates 157 | lda control1 158 | and #%00011110 ;;SET TO COLOUR 159 | sta _control1 160 | endm 161 | ;--------------------------------------------------------------- 162 | testcrash macro 163 | jsr turninteron 164 | !1 blackandwhite 165 | colour 166 | jmp !1 167 | endm 168 | ;--------------------------------------------------------------- 169 | changebank macro 170 | if @1=12 171 | jsr changebank12rou 172 | endif 173 | if @1=13 174 | jsr changebank13rou 175 | endif 176 | if @1=14 177 | lda #@1 178 | sta bankno 179 | sta bank.tbl+@1 180 | endif 181 | endm 182 | ;--------------------------------------------------------------- 183 | incr macro ;entry address 184 | ifs [@2][] ;increases (address) 185 | inc @1 186 | bne !1 187 | inc @1+1 188 | !1 189 | else 190 | error wrong number of parameters in incr 191 | endif 192 | endm 193 | ;--------------------------------------------------------------- 194 | decr macro ;entry address 195 | ifs [@2][] ;decreases (address) 196 | dec @1 197 | pha 198 | lda #$ff 199 | cmp @1 200 | bne !1 201 | dec @1+1 202 | !1 pla 203 | else 204 | error wrong number of parameters in decr 205 | endif 206 | endm 207 | ;---------------------------------------------------------------- 208 | dca macro ;decrement A register 209 | sec 210 | sbc #1 211 | endm 212 | ;---------------------------------------------------------------- 213 | ica macro 214 | clc 215 | adc #1 216 | endm 217 | ;------------------------------------------------------------------ 218 | add16to16 macro ;source1,source2,dest (16 bit addresses) 219 | ifs [@4][] ;adds (source1) to (source2), stores in (dest) 220 | lda @1 221 | clc 222 | adc @2 223 | sta @3 224 | lda @1+1 225 | adc @2+1 226 | sta @3+1 227 | else 228 | error wrong number of parameters in add16to16 229 | endif 230 | endm 231 | ;-------------------------------------------------------------- 232 | sub16from16 macro ;source1,source2,dest (16 bit addresses) 233 | ifs [@4][] ;subs (source1) from (source2), stores in (dest) 234 | lda @2 235 | sec 236 | sbc @1 237 | sta @3 238 | lda @2+1 239 | sbc @1+1 240 | sta @3+1 241 | else 242 | error wrong number of parameters in sub16from16 243 | endif 244 | endm 245 | ;--------------------------------------------------------------- 246 | sub16fromval macro ;source1,val,dest (16 bit addresses) 247 | ifs [@4][] ;subs (source1) from value, stores in (dest) 248 | lda #>@2 249 | sec 250 | sbc @1 251 | sta @3 252 | lda #<@2 253 | sbc @1+1 254 | sta @3+1 255 | else 256 | error wrong number of parameters in sub16from16 257 | endif 258 | endm 259 | ;--------------------------------------------------------------- 260 | add16to8 macro ;source2(16),source1(8),dest (16) 261 | ifs [@4][] ;adds (source1) to (source2), stores in (dest) 262 | lda @1 263 | clc 264 | adc @2 265 | sta @3 266 | lda @1+1 267 | adc #0 268 | sta @3+1 269 | else 270 | error wrong number of parameters in add16to8 271 | 272 | endif 273 | endm 274 | ;--------------------------------------------------------------- 275 | sub8from16 macro ;source1(8),source2(16),dest (16) 276 | ifs [@4][] ;subs (source1) from (source2), stores in (dest) 277 | lda @2 278 | sec 279 | sbc @1 280 | sta @3 281 | lda @2+1 282 | sbc #0 283 | sta @3+1 284 | else 285 | error wrong number of parameters in sub8from16 286 | endif 287 | endm 288 | ;----------------------------------------------------------------- 289 | add16toval macro ;source1,value,destination (16 bit values) 290 | if @1=@3 291 | lda @1 292 | clc 293 | adc #>@2 294 | sta @3 295 | 296 | if @2<256 297 | 298 | bcc !1 299 | inc @3+1 300 | !1 301 | 302 | else 303 | lda @1+1 304 | adc #<@2 305 | sta @3+1 306 | endif 307 | 308 | else 309 | 310 | lda @1 311 | clc 312 | adc #>@2 313 | sta @3 314 | lda @1+1 315 | adc #<@2 316 | sta @3+1 317 | endif 318 | endm 319 | ;----------------------------------------------------------------- 320 | ;SMALL LDIR - DIRECT 321 | ;entry address1(16bit),address2(16bit),length(8bit) 322 | ;transfers up to 1 page of memory from the (address1) to (address2) 323 | ;eg sldir $3000,$4000,$80 transfers 128 bytes from $3000 on to $4000 324 | 325 | sldir macro 326 | ifs [@4][] 327 | uuu = @3 328 | if uuu = $100 329 | uuu = 0 330 | endif 331 | if uuu >255 332 | error "SMALL LDIR only up to 1 page may be transfered 333 | endif 334 | ldy #0 335 | !1 lda @1,y 336 | sta @2,y 337 | iny 338 | cpy #uuu 339 | bne !1 340 | else 341 | error wrong number of parameters in sldir 342 | endif 343 | endm 344 | ;----------------------------------------------------------------- 345 | ;SMALL LDIR - INDIRECT 346 | ;entry address1(16bit),address2(16bit),length(8bit) 347 | ;transfers up to 1 page of memory from the address pointed to by (address1) 348 | ;to the address pointed to by (address2) length is stored in (length) address 349 | ;eg slddrind $3000,$3002,$3004 where (&3000)=&2000, (&3002)=&2800, (&3004)=124 350 | ;transfers 124 bytes from $2000 on to $2800 working UP 351 | 352 | sldirind macro 353 | ifs [@4][] 354 | ldx @3 355 | ldy #0 356 | !1 lda (@1),y 357 | sta (@2),y 358 | iny 359 | dex 360 | bne !1 361 | else 362 | error wrong number of parameters in sldirind 363 | endif 364 | endm 365 | ;----------------------------------------------------------------- 366 | ;SMALL LDDR - DIRECT 367 | ;entry address1(16bit),address2(16bit),length(8bit) 368 | ;transfers up to 1 page of memory from the (address1) to (address2) 369 | ;eg slddr $3000,$4000,$80 transfers 128 bytes from $3000 on to $4000 working 370 | ;DOWN 371 | slddr macro 372 | ifs [@4][] 373 | uuu = @3 374 | if uuu EQU$100 375 | uuu = 0 376 | endif 377 | if uuu >255 378 | error "SMALL LDDR only up to 1 page may be transfered 379 | endif 380 | ldx #uuu 381 | !1 lda @1-UUU-1,x 382 | sta @2-UUU-1,x 383 | dex 384 | bne !1 385 | else 386 | error wrong number of parameters in slddr 387 | endif 388 | endm 389 | ;----------------------------------------------------------------- 390 | ;SMALL LDDR - INDIRECT 391 | ;entry address1(16bit),address2(16bit),length(8bit) 392 | ;transfers up to 1 page of memory from the address pointed to by (address1) 393 | ;to the address pointed to by (address2) length is stored in (length) address 394 | ;eg slddrind $3000,$3002,$3004 where (&3000)=&2000, (&3002)=&2800, (&3004)=124 395 | ;transfers 124 bytes from $2000 on to $2800 working DOWN 396 | 397 | slddrind macro 398 | ifs [@4][] 399 | ldy #@3-1 400 | !1 lda (@1),y 401 | sta (@2),y 402 | dey 403 | bpl !1 404 | else 405 | error wrong number of parameters in slddrind 406 | endif 407 | endm 408 | ;----------------------------------------------------------------- 409 | ;----------------------------------------------------------------- 410 | ;SMALL LDDR - DIRECT 411 | ;entry address1(16bit),address2(16bit),length 412 | ;transfers up to 1 page of memory from the address pointed to by (address1) 413 | ;to the address pointed to by (address2) 414 | ;eg slddrind $3000,$3002,$3004 where (&3000)=&2000, (&3002)=&2800, (&3004)=124 415 | ;transfers 124 bytes from $2000 on to $2800 working DOWN 416 | 417 | slddrdir macro 418 | ifs [@4][] 419 | ldx #@3 420 | ldy #0 421 | !1 lda (@1),y 422 | sta (@2),y 423 | decr @1 424 | decr @2 425 | dex 426 | bne !1 427 | else 428 | error wrong number of parameters in slddrind 429 | endif 430 | endm 431 | ;------------------------------------------------------------------- 432 | ;BIG LDIR - direct 433 | ;entry address1(16bit),address2(16bit),length(16bit) 434 | ;transfers up to 64K of memory from the (address1) to (address2) 435 | ;eg sldir #3000,#4000,#800 transfers #8000 bytes from #3000 on to #4000 436 | 437 | ldir macro ;address1(HL),address2(DE),length(BC) 438 | ;transfers (length) bytes of data starting 439 | ;at address1 to address2 440 | ifs [@4][] 441 | lda #>@1 442 | sta ADDRESS 443 | lda #<@1 444 | sta ADDRESS+1 445 | lda #>@2 446 | sta ADDRESS2 447 | lda #<@2 448 | sta ADDRESS2+1 449 | lda #>@3 450 | sta ADDRESS3 451 | lda #<@3 452 | sta ADDRESS3+1 453 | ldirind address,address2,address3 454 | else 455 | error wrong number of parameters in ldir 456 | endif 457 | endm 458 | ;------------------------------------------------------------------ 459 | ;BIG LDIR - indirect 460 | ;entry address1(16bit),address2(16bit),length(16bit) 461 | ;transfers up to 64K of memory from the address stored in (address1) to the 462 | ;address stored in (address2) length is the number stored in (length) 463 | ;eg sldir &30,&32,&34 wher (&30)=1234, (&32)=5678, (&34)=4321 transfers 4321 464 | ;bytes from 1234 on to 5678 465 | 466 | ldirind macro ;address1(HL),address2(DE),length(BC) 467 | ;transfers (length) bytes of data starting 468 | ;at (address1) to (address2) 469 | ifs [@4][] 470 | LDY #0 471 | !1 lda (@1),y ;at (address1) to memory starting at (address2) 472 | sta (@2),y 473 | inc @1 ;increases (address) 474 | bne !2 475 | inc @1+1 476 | !2 inc @2 ;increases (address) 477 | bne !3 478 | inc @2+1 479 | !3 dec @3 480 | lda #$ff 481 | cmp @3 482 | bne !4 483 | dec @3+1 484 | !4 lda @3 485 | ora @3+1 486 | bne !1 487 | else 488 | error wrong number of parameters in ldirind 489 | endif 490 | endm 491 | ;------------------------------------------------------------------ 492 | add macro ;does a CLC ADC with any legal addressing mode 493 | ifs [@2][] 494 | clc 495 | adc @1 496 | else 497 | ifs [@3][] 498 | clc 499 | adc @1,@2 500 | endif 501 | endif 502 | endm 503 | ;------------------------------------------------------------------ 504 | sub macro ;does a SEC SBC with any legal addressing mode 505 | ifs [@2][] 506 | sec 507 | sbc @1 508 | else 509 | ifs [@3][] 510 | sec 511 | sbc @1,@2 512 | endif 513 | endif 514 | endm 515 | ;------------------------------------------------------------------ 516 | move.w macro ;entry address1,address2 517 | ifs [@3][] ;transfers a word in (address1) to (address2) 518 | lda @1 519 | sta @2 520 | lda @1+1 521 | sta @2+1 522 | else 523 | error wrong number of parameters in ldDEinHL 524 | endif 525 | endm 526 | ;------------------------------------------------------------------ 527 | move.b macro ;entry address1,address2 528 | ifs [@3][] ;transfers a byte in (address1) to (address2) 529 | lda @1 530 | sta @2 531 | else 532 | error wrong number of parameters in move.b 533 | endif 534 | endm 535 | ;------------------------------------------------------------------ 536 | move.val macro ;entry number,address 537 | lda #>@1 ;puts 16 bit number into address 538 | sta @2 539 | lda #<@1 540 | sta @2+1 541 | endm 542 | ;------------------------------------------------------------------ 543 | cphlde macro ;entry address1,address2 544 | lda @1+1 ;compare (address1) with (address2) 545 | cmp @2+1 ;exit with zero flag set if equal 546 | bne !1 547 | lda @1 548 | cmp @2 549 | !1 ;here zero flag set if (address1)=(address2) 550 |  ;carry flag set if (address1)>=(address2) 551 | endm 552 | ;------------------------------------------------------------------ 553 | cpwordvalue macro ;entry address1,value (16) 554 | lda @1+1 ;compare (address1) with value 555 | cmp #<@2 ;exit with zero flag set if equal 556 | bne !1 557 | lda @1 558 | cmp #>@2 559 | !1 ;here zero flag set if (address1)=value 560 | ;carry flag set if (address1)>=value 561 | endm 562 | ;------------------------------------------------------------------ 563 | cpxyvalue macro ;entry xy,value (16) 564 | ;compare xy with value 565 | cpy #<@1 ;exit with zero flag set if equal 566 | bne !1 567 | cpx #>@1 568 | !1 ;here zero flag set if (address1)=value 569 | ;carry flag set if (address1)>=value 570 | endm 571 | ;------------------------------------------------------------------ 572 | ldxy macro ;;;ldx with lo ldy with hi 573 | ldx #>@1 574 | ldy #<@1 575 | endm 576 | ;------------------------------------------------------------------ 577 | stxy macro ;;;stx with lo sty with hi 578 | stx #>@1 579 | sty #<@1 580 | endm 581 | ;------------------------------------------------------------------ 582 | multword macro ;entry address1,no of times to mult by 2 583 | ifs [@3][] ;transfers a word in (address1) to (address2) 584 | if @2>1 585 | mwn = @2 586 | DO 587 | mwn = mwn/2 588 | asl @1 589 | rol @1+1 590 | until mwn EQU 1 591 | endif 592 | else 593 | error wrong number of parameters in multword 594 | endif 595 | endm 596 | ;---------------------------------------------------------------- 597 | tstatepause macro 598 | 599 | tleft0 = @1 600 | 601 | if tleft0 > 1301 602 | tleft1 = ((tleft0-1299)/1284) 603 | tleft0 = tleft0-(1299+(1284*(tleft1))) 604 | sty tstatepausey 605 | stx tstatepausex 606 | ldx #0 ;2 ;x EQU 0 for drop thru delay of 1304 607 | ldy #tleft1+1 608 | !1 dex 609 | bne !1 610 | dey 611 | bne !1 ;2 ;1285 * (y-1) 612 | ldy tstatepausey 613 | ldx tstatepausex 614 | ;(1299) 615 | endif 616 | 617 | if tleft0 > 16 618 | 619 | tleft1 = ((tleft0-12)/5)-1 620 | tleft0 = tleft0-((tleft1*5)+12) 621 | stx tstatepausex 622 | ldx #tleft1+1 623 | !FGH dex 624 | bne !FGH 625 | ldx tstatepausex 626 | endif 627 | 628 | if tleft0 > 7 629 | nop 630 | nop 631 | nop 632 | tleft0 = tleft0-6 633 | endif 634 | 635 | if tleft0 > 7 636 | nop 637 | nop 638 | nop 639 | tleft0 = tleft0-6 640 | endif 641 | 642 | if tleft0 > 7 643 | nop 644 | nop 645 | nop 646 | tleft0 = tleft0-6 647 | endif 648 | 649 | if tleft0 = 6 650 | nop 651 | nop 652 | nop 653 | 654 | tleft0 = 0 655 | endif 656 | 657 | if tleft0=1 658 | ERROR "no 1 delay 0 659 | endif 660 | 661 | if tleft0 > 3 662 | nop 663 | tleft0 = tleft0-2 664 | endif 665 | 666 | if tleft0 > 3 667 | nop 668 | tleft0 = tleft0-2 669 | endif 670 | 671 | if tleft0 > 3 672 | nop 673 | tleft0 = tleft0-2 674 | endif 675 | 676 | if tleft0=3 677 | tleft0 = 0 678 | bit $01 679 | endif 680 | 681 | if tleft0=1 682 | ERROR "no 1 delay 2 683 | endif 684 | 685 | if tleft0=2 686 | tleft0 = 0 687 | nop 688 | endif 689 | if tleft0=1 690 | ERROR "no 1 delay 3 691 | endif 692 | 693 | endm 694 | 695 | 696 | ;-------------------- 697 | ;BCC means gone past zero 698 | bgpz macro 699 | bcc @1 700 | endm 701 | ;-------------------- 702 | ;BCS means NOT gone past zero 703 | bngpz macro 704 | bcs @1 705 | endm 706 | ;--------------------- 707 | ;$2000 status0 708 | ; 709 | ;128 1=allow nmi'S TO OCCUR 710 | ;64 1=? 711 | ;32 1=extend sprites 712 | ;16 1=sprites at $1000 713 | ;8 1=chars at $1000 714 | ;4 1=vram add 32 715 | ;2 1=interchange screens 1+2 for vertical mode 716 | ;1 1=interchange screens 1+2 for horizontal mode 717 | ; 718 | ;$2001 status1 719 | ; 720 | ;128 1=increase blue content of all cols 721 | ;64 1=increase green content of all cols 722 | ;32 1=increase red content of all cols 723 | ;16 1=sprites on 724 | ;8 1=chars on 725 | ;4 1=remove left edge of sprites 726 | ;2 1=remove left edge of chars 727 | ;1 1=monochrome 728 | ; 729 | ; 730 | 731 | 732 |  --------------------------------------------------------------------------------