.OPT NO LIST ; ; UPDATE EMUOS.LIS ; Start Emulator ; Insert MAC/65 Cartridge ; ENTER #H5:EMUOS.LIS,A ; ASM,,#H0:EMUOS.OBJ ; Exit Emulator ; mkimg -input emuos.obj -image emuos.img -header emuos.h c000 ffff ; BOOT = $09 RTCLOK = $12 VVBLKI = $0222 VVBLKD = $0224 ; ; ============================ ; OS Hardware Shadow Registers ; ============================ ; CHART = $02F3 CHBAS = $02F4 CH = $02FC COLOR4 = $02C8 COLOR0 = $02C4 COLOR1 = $02C5 COLOR2 = $02C6 COLOR3 = $02C7 PCOLR0 = $02C0 PCOLR1 = $02C1 PCOLR2 = $02C2 PCOLR3 = $02C3 SDLSTH = $0231 SDLSTL = $0230 SDMCTL = $022F STICK0 = $0278 STICK1 = $0279 STICK2 = $027A STICK3 = $027B GPRIOR = $026F SSKCTL = $0232 STRIG0 = $0284 STRIG1 = $0285 STRIG2 = $0286 STRIG3 = $0287 ; DDEVIC = $0300 DUNIT = $0301 DCOMND = $0302 DSTATS = $0303 DBUFLO = $0304 DBUFHI = $0305 DTIMLO = $0306 DTIMHI = $0307 DBYTLO = $0308 DBYTHI = $0309 DAUX1 = $030A DAUX2 = $030B ; ; ================== ; Hardware Registers ; ================== ; CHACTL = $D401 CHBASE = $D409 COLBK = $D01A COLPF0 = $D016 COLPF1 = $D017 COLPF2 = $D018 COLPF3 = $D019 COLPM0 = $D012 COLPM1 = $D013 COLPM2 = $D014 COLPM3 = $D015 CONSOL = $D01F DLISTH = $D403 DLISTL = $D402 DMACTL = $D400 KBCODE = $D209 IRQEN = $D20E IRQST = $D20E NMIRES = $D40F NMIST = $D40F PACTL = $D302 PORTA = $D300 PORTB = $D301 PRIOR = $D01B SKCTL = $D20F TRIG0 = $D010 TRIG1 = $D011 TRIG2 = $D012 TRIG3 = $D013 VCOUNT = $D40B ; *= $E000 .BYTE $00,$00,$00,$00,$00,$00,$00,$00 .BYTE $00,$18,$18,$18,$18,$00,$18,$00 .BYTE $00,$66,$66,$66,$00,$00,$00,$00 .BYTE $00,$66,$FF,$66,$66,$FF,$66,$00 .BYTE $18,$3E,$60,$3C,$06,$7C,$18,$00 .BYTE $00,$66,$6C,$18,$30,$66,$46,$00 .BYTE $1C,$36,$1C,$38,$6F,$66,$3B,$00 .BYTE $00,$18,$18,$18,$00,$00,$00,$00 .BYTE $00,$0E,$1C,$18,$18,$1C,$0E,$00 .BYTE $00,$70,$38,$18,$18,$38,$70,$00 .BYTE $00,$66,$3C,$FF,$3C,$66,$00,$00 .BYTE $00,$18,$18,$7E,$18,$18,$00,$00 .BYTE $00,$00,$00,$00,$00,$18,$18,$30 .BYTE $00,$00,$00,$7E,$00,$00,$00,$00 .BYTE $00,$00,$00,$00,$00,$18,$18,$00 .BYTE $00,$06,$0C,$18,$30,$60,$40,$00 .BYTE $00,$3C,$66,$6E,$76,$66,$3C,$00 .BYTE $00,$18,$38,$18,$18,$18,$7E,$00 .BYTE $00,$3C,$66,$0C,$18,$30,$7E,$00 .BYTE $00,$7E,$0C,$18,$0C,$66,$3C,$00 .BYTE $00,$0C,$1C,$3C,$6C,$7E,$0C,$00 .BYTE $00,$7E,$60,$7C,$06,$66,$3C,$00 .BYTE $00,$3C,$60,$7C,$66,$66,$3C,$00 .BYTE $00,$7E,$06,$0C,$18,$30,$30,$00 .BYTE $00,$3C,$66,$3C,$66,$66,$3C,$00 .BYTE $00,$3C,$66,$3E,$06,$0C,$38,$00 .BYTE $00,$00,$18,$18,$00,$18,$18,$00 .BYTE $00,$00,$18,$18,$00,$18,$18,$30 .BYTE $06,$0C,$18,$30,$18,$0C,$06,$00 .BYTE $00,$00,$7E,$00,$00,$7E,$00,$00 .BYTE $60,$30,$18,$0C,$18,$30,$60,$00 .BYTE $00,$3C,$66,$0C,$18,$00,$18,$00 .BYTE $00,$3C,$66,$6E,$6E,$60,$3E,$00 .BYTE $00,$18,$3C,$66,$66,$7E,$66,$00 .BYTE $00,$7C,$66,$7C,$66,$66,$7C,$00 .BYTE $00,$3C,$66,$60,$60,$66,$3C,$00 .BYTE $00,$78,$6C,$66,$66,$6C,$78,$00 .BYTE $00,$7E,$60,$7C,$60,$60,$7E,$00 .BYTE $00,$7E,$60,$7C,$60,$60,$60,$00 .BYTE $00,$3E,$60,$60,$6E,$66,$3E,$00 .BYTE $00,$66,$66,$7E,$66,$66,$66,$00 .BYTE $00,$7E,$18,$18,$18,$18,$7E,$00 .BYTE $00,$06,$06,$06,$06,$66,$3C,$00 .BYTE $00,$66,$6C,$78,$78,$6C,$66,$00 .BYTE $00,$60,$60,$60,$60,$60,$7E,$00 .BYTE $00,$63,$77,$7F,$6B,$63,$63,$00 .BYTE $00,$66,$76,$7E,$7E,$6E,$66,$00 .BYTE $00,$3C,$66,$66,$66,$66,$3C,$00 .BYTE $00,$7C,$66,$66,$7C,$60,$60,$00 .BYTE $00,$3C,$66,$66,$66,$6C,$36,$00 .BYTE $00,$7C,$66,$66,$7C,$6C,$66,$00 .BYTE $00,$3C,$60,$3C,$06,$06,$3C,$00 .BYTE $00,$7E,$18,$18,$18,$18,$18,$00 .BYTE $00,$66,$66,$66,$66,$66,$7E,$00 .BYTE $00,$66,$66,$66,$66,$3C,$18,$00 .BYTE $00,$63,$63,$6B,$7F,$77,$63,$00 .BYTE $00,$66,$66,$3C,$3C,$66,$66,$00 .BYTE $00,$66,$66,$3C,$18,$18,$18,$00 .BYTE $00,$7E,$0C,$18,$30,$60,$7E,$00 .BYTE $00,$1E,$18,$18,$18,$18,$1E,$00 .BYTE $00,$40,$60,$30,$18,$0C,$06,$00 .BYTE $00,$78,$18,$18,$18,$18,$78,$00 .BYTE $00,$08,$1C,$36,$63,$00,$00,$00 .BYTE $00,$00,$00,$00,$00,$00,$FF,$00 .BYTE $00,$36,$7F,$7F,$3E,$1C,$08,$00 .BYTE $18,$18,$18,$1F,$1F,$18,$18,$18 .BYTE $03,$03,$03,$03,$03,$03,$03,$03 .BYTE $18,$18,$18,$F8,$F8,$00,$00,$00 .BYTE $18,$18,$18,$F8,$F8,$18,$18,$18 .BYTE $00,$00,$00,$F8,$F8,$18,$18,$18 .BYTE $03,$07,$0E,$1C,$38,$70,$E0,$C0 .BYTE $C0,$E0,$70,$38,$1C,$0E,$07,$03 .BYTE $01,$03,$07,$0F,$1F,$3F,$7F,$FF .BYTE $00,$00,$00,$00,$0F,$0F,$0F,$0F .BYTE $80,$C0,$E0,$F0,$F8,$FC,$FE,$FF .BYTE $0F,$0F,$0F,$0F,$00,$00,$00,$00 .BYTE $F0,$F0,$F0,$F0,$00,$00,$00,$00 .BYTE $FF,$FF,$00,$00,$00,$00,$00,$00 .BYTE $00,$00,$00,$00,$00,$00,$FF,$FF .BYTE $00,$00,$00,$00,$F0,$F0,$F0,$F0 .BYTE $00,$1C,$1C,$77,$77,$08,$1C,$00 .BYTE $00,$00,$00,$1F,$1F,$18,$18,$18 .BYTE $00,$00,$00,$FF,$FF,$00,$00,$00 .BYTE $18,$18,$18,$FF,$FF,$18,$18,$18 .BYTE $00,$00,$3C,$7E,$7E,$7E,$3C,$00 .BYTE $00,$00,$00,$00,$FF,$FF,$FF,$FF .BYTE $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0 .BYTE $00,$00,$00,$FF,$FF,$18,$18,$18 .BYTE $18,$18,$18,$FF,$FF,$00,$00,$00 .BYTE $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 .BYTE $18,$18,$18,$1F,$1F,$00,$00,$00 .BYTE $78,$60,$78,$60,$7E,$18,$1E,$00 .BYTE $00,$18,$3C,$7E,$18,$18,$18,$00 .BYTE $00,$18,$18,$18,$7E,$3C,$18,$00 .BYTE $00,$18,$30,$7E,$30,$18,$00,$00 .BYTE $00,$18,$0C,$7E,$0C,$18,$00,$00 .BYTE $00,$18,$3C,$7E,$7E,$3C,$18,$00 .BYTE $00,$00,$3C,$06,$3E,$66,$3E,$00 .BYTE $00,$60,$60,$7C,$66,$66,$7C,$00 .BYTE $00,$00,$3C,$60,$60,$60,$3C,$00 .BYTE $00,$06,$06,$3E,$66,$66,$3E,$00 .BYTE $00,$00,$3C,$66,$7E,$60,$3C,$00 .BYTE $00,$0E,$18,$3E,$18,$18,$18,$00 .BYTE $00,$00,$3E,$66,$66,$3E,$06,$7C .BYTE $00,$60,$60,$7C,$66,$66,$66,$00 .BYTE $00,$18,$00,$38,$18,$18,$3C,$00 .BYTE $00,$06,$00,$06,$06,$06,$06,$3C .BYTE $00,$60,$60,$6C,$78,$6C,$66,$00 .BYTE $00,$38,$18,$18,$18,$18,$3C,$00 .BYTE $00,$00,$66,$7F,$7F,$6B,$63,$00 .BYTE $00,$00,$7C,$66,$66,$66,$66,$00 .BYTE $00,$00,$3C,$66,$66,$66,$3C,$00 .BYTE $00,$00,$7C,$66,$66,$7C,$60,$60 .BYTE $00,$00,$3E,$66,$66,$3E,$06,$06 .BYTE $00,$00,$7C,$66,$60,$60,$60,$00 .BYTE $00,$00,$3E,$60,$3C,$06,$7C,$00 .BYTE $00,$18,$7E,$18,$18,$18,$0E,$00 .BYTE $00,$00,$66,$66,$66,$66,$3E,$00 .BYTE $00,$00,$66,$66,$66,$3C,$18,$00 .BYTE $00,$00,$63,$6B,$7F,$3E,$36,$00 .BYTE $00,$00,$66,$3C,$18,$3C,$66,$00 .BYTE $00,$00,$66,$66,$66,$3E,$0C,$78 .BYTE $00,$00,$7E,$0C,$18,$30,$7E,$00 .BYTE $00,$18,$3C,$7E,$7E,$18,$3C,$00 .BYTE $18,$18,$18,$18,$18,$18,$18,$18 .BYTE $00,$7E,$78,$7C,$6E,$66,$06,$00 .BYTE $08,$18,$38,$78,$38,$18,$08,$00 .BYTE $10,$18,$1C,$1E,$1C,$18,$10,$00 ; DISKIV = $E450 DSKINV = $E453 CIOV = $E456 SIOV = $E459 SETVBV = $E45C SYSVBV = $E45F XITVBV = $E462 SIOINV = $E465 SENDEV = $E468 INTINV = $E46B CIOINV = $E46E BLKBDV = $E471 WARMSV = $E474 COLDSV = $E477 RBLOKV = $E47A CSOPIV = $E47D ; *= DISKIV JMP HALT *= DSKINV JMP HALT *= CIOV JMP HALT *= SIOV JMP HALT *= SETVBV JMP HALT *= SYSVBV JMP HALT *= XITVBV JMP XITVBL *= SIOINV JMP HALT *= SENDEV JMP HALT *= INTINV JMP HALT *= CIOINV JMP HALT *= BLKBDV JMP HALT *= WARMSV JMP COLDSTART *= COLDSV JMP COLDSTART *= RBLOKV JMP HALT *= CSOPIV JMP HALT ; *= $F800 COLDSTART LDX #$FF TXS LDA # SYSVBL STA VVBLKI+1 LDA # XITVBL STA VVBLKD+1 LDA # IRQ STA $0217 LDA $0000 BNE RPIIMG ; Run pre-installed image LDA $0001 BNE RPIIMG ; Run pre-installed image LDA $BFFC INC $BFFC CMP $BFFC BNE BOOTDISK ; BNE MONTY JSR CART.INIT JMP ($BFFA) CART.INIT JMP ($BFFE) ;MONTY ; STA $BFFC ; Restore original value to $BFFC ; JMP $0115 ; Run Montezummas Revenge RPIIMG JMP ($0000) ; Run pre-installed image ; BOOTDISK LDA #$31 STA DDEVIC LDA #$01 STA DUNIT LDA #$52 STA DCOMND LDA #0 STA DBUFLO LDA #4 STA DBUFHI LDA #$80 STA DBYTLO LDA #$00 STA DBYTHI LDA #1 STA DAUX1 LDA #0 STA DAUX2 JSR SIOV BMI HALT LDA $0400 CMP #$FF BNE BOOTDISK.1 LDA $0401 CMP #$FF BEQ BINARY.FILE BOOTDISK.1 STA 0 CLC LDA $0402 STA DBUFLO ADC #6 STA 1 LDA $0403 STA DBUFHI ADC #0 STA 2 LDA $0404 STA 3 LDA $0405 STA 4 ?L1 JSR SIOV BMI HALT CLC LDA DBUFLO ADC #$80 STA DBUFLO LDA DBUFHI ADC #0 STA DBUFHI INC DAUX1 BNE ?L2 INC DAUX2 ?L2 DEC 0 BNE ?L1 DEC 5 BPL ?L1 JSR ?L3 ; Run initialisation code LDA #1 STA BOOT JSR ?L4 ; Run main program RTS ?L3 JMP ($01) ?L4 JMP ($03) ; BINARY.FILE ; HALT LDA # DLIST STA SDLSTH STA DLISTH LDA #$E0 STA CHBASE STA CHBAS LDA #$22 STA DMACTL STA SDMCTL LDA #$02 STA CHACTL STA CHART LDA #$CA STA COLBK STA COLOR4 LDA #$94 STA COLPF2 STA COLOR2 LDA #$0A STA COLPF1 STA COLOR1 ; HALT2 JMP HALT2 DLIST .BYTE $70,$70,$70 .BYTE $42, HALTMSG .BYTE $02,$02,$02,$02,$02 .BYTE $02,$02,$02,$02,$02 .BYTE $02,$02,$02,$02,$02 .BYTE $02,$02,$02,$02,$02 .BYTE $02,$02,$02 .BYTE $41, DLIST ; HALTMSG .SBYTE " Atari800/OS Emulation Halted " .SBYTE " Copright (c) 1997 David J. Firth " .SBYTE " " .SBYTE " E-Mail: david@signus.demon.co.uk " .SBYTE " http://www.signus.demon.co.uk/david/ " .SBYTE " " .SBYTE "Sorry this program needs a real Atari/OS" .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " .SBYTE " " ; NMI BIT NMIST BPL VBI JMP ($0200) VBI PHA TXA PHA TYA PHA STA NMIRES JMP (VVBLKI) SYSVBL INC RTCLOK+2 BNE SYSVBL.1 INC RTCLOK+1 BNE SYSVBL.1 INC RTCLOK SYSVBL.1 LDA SDMCTL STA DMACTL LDA SDLSTL STA DLISTL LDA SDLSTH STA DLISTH LDA COLOR4 STA COLBK LDA COLOR0 STA COLPF0 LDA COLOR1 STA COLPF1 LDA COLOR2 STA COLPF2 LDA COLOR3 STA COLPF3 LDA PCOLR0 STA COLPM0 LDA PCOLR1 STA COLPM1 LDA PCOLR2 STA COLPM2 LDA PCOLR3 STA COLPM3 LDA CHART STA CHACTL LDA CHBAS STA CHBASE LDA PORTA AND #$0F STA STICK0 LDA PORTA ASL A ASL A ASL A ASL A STA STICK1 LDA PORTB AND #$0F STA STICK2 LDA PORTB ASL A ASL A ASL A ASL A STA STICK3 LDA GPRIOR STA PRIOR LDA SSKCTL STA SKCTL LDA TRIG0 STA STRIG0 LDA TRIG1 STA STRIG1 LDA TRIG2 STA STRIG2 LDA TRIG3 STA STRIG3 JMP (VVBLKD) XITVBL PLA TAY PLA TAX PLA IRQ.VECTOR JMP ($0216) IRQ PHA LDA IRQST ; Get Interrupt Status AND #$40 BNE IRQ.EXIT LDA KBCODE STA CH IRQ.EXIT PLA RTI ; *= $FFFA .WORD NMI *= $FFFC .WORD COLDSTART *= $FFFE .WORD IRQ.VECTOR