junglejourney

changeset 217:59f37c9e74e4

Finished ROM loader and main code programs.
author David Boddie <david@boddie.org.uk>
date Sun Oct 16 21:36:30 2011 +0200
parents cdceac4f5ea8
children 958f6c30e575
files buildrom.py mapcode.oph romcode.oph romloader.oph
diffstat 4 files changed, 86 insertions(+), 37 deletions(-) [+]
line diff
     1.1 --- a/buildrom.py	Sun Oct 16 18:25:22 2011 +0200
     1.2 +++ b/buildrom.py	Sun Oct 16 21:36:30 2011 +0200
     1.3 @@ -21,7 +21,7 @@
     1.4  
     1.5  if __name__ == "__main__":
     1.6  
     1.7 -    if not 1 <= len(sys.argv) <= 3:
     1.8 +    if not 1 <= len(sys.argv) <= 3 or "-h" in sys.argv[1:] or "--help" in sys.argv[1:]:
     1.9      
    1.10          sys.stderr.write("Usage: %s [<code ROM file> <loader ROM file>]\n" % sys.argv[0])
    1.11          sys.exit(1)
    1.12 @@ -39,16 +39,16 @@
    1.13      #      CODE
    1.14      #
    1.15      # 8000 ROM header code
    1.16 -    # 8300 title screen (0x1800 bytes including completion screen)
    1.17 +    # 8400 title screen (0x1800 bytes including completion screen)
    1.18      #
    1.19 -    # 9B00 CHARS (0x1280 bytes of character sprites)
    1.20 -    # AD80 SPRITES (0x360 bytes of tile sprites)
    1.21 -    # B0E0 space
    1.22 +    # 9C00 CHARS (0x1280 bytes of character sprites)
    1.23 +    # AE80 SPRITES (0x360 bytes of tile sprites)
    1.24 +    # B1E0 space
    1.25      
    1.26      system("ophis romcode.oph " + code_rom_file)
    1.27      
    1.28      # Add padding after the code to make a final image size of 16K.
    1.29 -    romcode = open("junglecode.rom", "rb").read()
    1.30 +    romcode = open(code_rom_file, "rb").read()
    1.31      romcode += (0x4000 - len(romcode))*"\x00"
    1.32      open(code_rom_file, "wb").write(romcode)
    1.33      
    1.34 @@ -57,16 +57,16 @@
    1.35      romdata = open(loader_rom_file, "rb").read()
    1.36      
    1.37      # Add padding before the data is appended to the loader code.
    1.38 -    romdata += (0x300 - len(romdata))*"\x00"
    1.39 +    romdata += (0x400 - len(romdata))*"\x00"
    1.40      
    1.41 -    data = makesprites.read_sprites([makesprites.title])
    1.42 +    romdata += makesprites.read_sprites([makesprites.title])
    1.43      completed = makesprites.encode(makesprites.read_sprite(makesprites.completed))
    1.44      overlay = makesprites.read_sprite(makesprites.overlay)
    1.45      combined = makesprites.combine(completed, overlay)
    1.46      romdata += combined
    1.47      
    1.48 +    romdata += makesprites.read_sprites(makesprites.chars)
    1.49      romdata += makesprites.read_sprites(makesprites.tiles)
    1.50 -    romdata += makesprites.read_sprites(makesprites.chars)
    1.51      romdata += (0x4000 - len(romdata))*"\x00"
    1.52      
    1.53      open(loader_rom_file, "wb").write(romdata)
     2.1 --- a/mapcode.oph	Sun Oct 16 18:25:22 2011 +0200
     2.2 +++ b/mapcode.oph	Sun Oct 16 21:36:30 2011 +0200
     2.3 @@ -4616,7 +4616,7 @@
     2.4          lda input_message,x
     2.5          jsr $ffee
     2.6          inx
     2.7 -        cpx #23
     2.8 +        cpx #21
     2.9          bne show_input_message_loop
    2.10      
    2.11      rts
     3.1 --- a/romcode.oph	Sun Oct 16 18:25:22 2011 +0200
     3.2 +++ b/romcode.oph	Sun Oct 16 21:36:30 2011 +0200
     3.3 @@ -15,11 +15,11 @@
     3.4  
     3.5  .org $8000
     3.6  rom_start:
     3.7 -jmp language_entry
     3.8 +.byte 0, 0, 0
     3.9  jmp service_entry
    3.10  
    3.11  ; ROM type
    3.12 -.byte $c2       ; 6502 code (2), language ($40), service ($80)
    3.13 +.byte $82       ; 6502 code (2), language ($40), service ($80)
    3.14  
    3.15  copyright_offset:
    3.16  .byte [copyright_string - rom_start - 1]
    3.17 @@ -39,10 +39,6 @@
    3.18  ; Second processor relocation address
    3.19  .byte 0, $80, 0, 0
    3.20  
    3.21 -language_entry:
    3.22 -
    3.23 -    jmp jungle_code
    3.24 -
    3.25  service_entry:
    3.26  
    3.27      cmp #4
    3.28 @@ -51,7 +47,7 @@
    3.29      service_entry_exit:
    3.30      rts
    3.31  
    3.32 -rom_name: .byte "JUNGLECODE"
    3.33 +rom_name: .byte "JUNGLECODE", 13
    3.34  
    3.35  service_command:
    3.36  
    3.37 @@ -68,7 +64,7 @@
    3.38          bne service_command_exit
    3.39          inx
    3.40          iny
    3.41 -        cpx #10
    3.42 +        cpx #11
    3.43          bne service_command_loop
    3.44      
    3.45      jsr jungle_code
    3.46 @@ -78,7 +74,7 @@
    3.47      service_command_exit:
    3.48      pla                         ; pop Y and X registers off the stack
    3.49      tax
    3.50 -    pha
    3.51 +    pla
    3.52      tay
    3.53      lda #4                      ; restore A
    3.54      rts
     4.1 --- a/romloader.oph	Sun Oct 16 18:25:22 2011 +0200
     4.2 +++ b/romloader.oph	Sun Oct 16 21:36:30 2011 +0200
     4.3 @@ -51,7 +51,7 @@
     4.4      service_entry_exit:
     4.5      rts
     4.6  
     4.7 -rom_name: .byte "JUNGLE"
     4.8 +rom_name: .byte "JUNGLE", 13
     4.9  
    4.10  service_command:
    4.11  
    4.12 @@ -68,7 +68,7 @@
    4.13          bne service_command_exit
    4.14          inx
    4.15          iny
    4.16 -        cpx #10
    4.17 +        cpx #7
    4.18          bne service_command_loop
    4.19      
    4.20      jsr jungle_code
    4.21 @@ -78,7 +78,7 @@
    4.22      service_command_exit:
    4.23      pla                         ; pop Y and X registers off the stack
    4.24      tax
    4.25 -    pha
    4.26 +    pla
    4.27      tay
    4.28      lda #4                      ; restore A
    4.29      rts
    4.30 @@ -127,24 +127,45 @@
    4.31      jsr $fff4   ; *TAPE
    4.32  
    4.33      jsr copy_title_down
    4.34 -    jsr move_completed_screen_down
    4.35 -    jsr copy_sprites_from_rom
    4.36 -    jsr copy_chars_from_rom
    4.37  
    4.38 -    lda #129    ; returns y=255 or 0
    4.39 -    ldx #157    ; SPACE
    4.40 -    ldy #255
    4.41 +    ldx #0
    4.42 +    show_input_message_loop:
    4.43 +
    4.44 +        lda input_message,x
    4.45 +        jsr $ffee
    4.46 +        inx
    4.47 +        cpx #21
    4.48 +        bne show_input_message_loop
    4.49 +
    4.50      wait_loop:
    4.51 +
    4.52 +        lda #128
    4.53 +        ldx #0
    4.54 +        jsr $fff4
    4.55 +        cpx #0              ; fire button pressed?
    4.56 +        beq wait_no_joystick
    4.57 +        jmp continue
    4.58 +
    4.59 +        wait_no_joystick:
    4.60 +
    4.61 +        lda #129    ; returns y=255 or 0
    4.62 +        ldx #157    ; SPACE
    4.63 +        ldy #255
    4.64          jsr $fff4
    4.65          cpy #255
    4.66          bne wait_loop
    4.67  
    4.68 -    ldx #<start_game
    4.69 -    ldy #>start_game
    4.70 -    jsr $fff7
    4.71 -    rts
    4.72 +    continue:
    4.73 +    clc
    4.74  
    4.75 -start_game: .byte "*JUNGLECODE", 13, 0
    4.76 +    jsr move_completed_screen_down
    4.77 +    jsr copy_sprites_from_rom
    4.78 +    jsr copy_chars_from_rom
    4.79 +    jsr copy_launch_code
    4.80 +
    4.81 +    jmp $1e00
    4.82 +
    4.83 +input_message:      .byte 17,3, 31,2,28, "Press SPACE/FIRE"
    4.84  
    4.85  set_hidden_palette:
    4.86  
    4.87 @@ -202,7 +223,7 @@
    4.88  
    4.89      lda #$00
    4.90      sta $70
    4.91 -    lda #$83
    4.92 +    lda #$84
    4.93      sta $71
    4.94  
    4.95      lda #$a0
    4.96 @@ -371,7 +392,7 @@
    4.97  
    4.98      lda #$80
    4.99      sta $70
   4.100 -    lda #$ad
   4.101 +    lda #$ae
   4.102      sta $71
   4.103  
   4.104      lda #$00
   4.105 @@ -419,7 +440,7 @@
   4.106  
   4.107      lda #$00
   4.108      sta $70
   4.109 -    lda #$9b
   4.110 +    lda #$9c
   4.111      sta $71
   4.112  
   4.113      lda #$00
   4.114 @@ -455,7 +476,7 @@
   4.115          sta $73
   4.116          clc
   4.117  
   4.118 -        cmp #$ad
   4.119 +        cmp #$51
   4.120          bne copy_chars_from_rom_loop1
   4.121          lda $72
   4.122          cmp #$80
   4.123 @@ -463,3 +484,35 @@
   4.124  
   4.125      clc
   4.126      rts
   4.127 +
   4.128 +launch_code:
   4.129 +
   4.130 +    ldx #[start_game - launch_code]
   4.131 +    ldy #$1e
   4.132 +    jsr $fff7
   4.133 +
   4.134 +start_game: .byte "*JUNGLECODE", 13, 0
   4.135 +
   4.136 +copy_launch_code:       ; copy the launch code to $1e00
   4.137 +
   4.138 +    lda #<launch_code
   4.139 +    sta $70
   4.140 +    lda #>launch_code
   4.141 +    sta $71
   4.142 +
   4.143 +    lda #$00
   4.144 +    sta $72
   4.145 +    lda #$1e
   4.146 +    sta $73
   4.147 +
   4.148 +    ldy #[copy_launch_code - launch_code - 1]
   4.149 +
   4.150 +    copy_launch_code_loop:
   4.151 +
   4.152 +        lda ($70),y
   4.153 +        sta ($72),y
   4.154 +        dey
   4.155 +        bpl copy_launch_code_loop
   4.156 +
   4.157 +    clc
   4.158 +    rts