the program consists of 4 parts part 1 is the basic program which loads at address $1001 part 2 is the setup routine which is at address $10C0 part 3 is the poke translation routine which is at address $1100 part 4 is the peek translation routine which is at address $1300 basic part: 5 if peek(1332)<>253 then print"THIS EMULATOR ONLY WORKS WITH 64KB MEMORY":end 10 color4,1 20 color0,1 30 color1,6 40 scnclr 50 sys4288 60 print"PET EMULATOR FOR PLUS4 BY BLACKY STARDUST" 70 clr 80 new start: (load $10C0. orig $10C0) sei ldx #$15 stx $2C ldx #$00 stx $0308 ldx #$11 stx $0309 ldx #$00 stx $030A ldx #$13 stx $030B cli rts pokestart: (load $1100, orig $10C0) jsr $0473 cmp #$97 beq checkpoke cmp #$3A jmp $8BD9 checkpoke: pha lda $81 cmp #$80 beq checkrealpoke pla cmp #$3A jmp $8BD9 leavepoke: ldy #$00 lda #$3A cmp #$3A jmp $8BD9 checkrealpoke: pla jsr $0473 jsr $9DD2 txa ldx $15 ldy $14 cpx #$00 beq checkzppoke cpx #$01 beq ignorepoke cpx #$02 beq checkkeypoke cpx #$03 beq ignorepoke cpx #$E8 beq checksoundpoke cpx #$80 beq checkscreenpoke cpx #$81 beq checkscreenpoke cpx #$82 beq checkscreenpoke cpx #$83 beq checkscreenpoke cpx #$80 bcc translatepoke ignorepoke: jmp leavepoke checkscreenpoke: jmp dorealscreenpoke checksoundpoke: jmp dorealsoundpoke checkkeypoke: jmp dorealkeypoke translatepoke: pha txa clc adc #$11 sta poker+2 sty poker+1 pla sei sta $FF3F poker: sta $0000 sta $FF3E cli jmp leavepoke checkzppoke: cpy #$8D beq time1poke cpy #$8E beq time2poke cpy #$8F beq time3poke cpy #$9E beq ndxpoke cpy #$C4 beq pnt1poke cpy #$C5 beq pnt2poke cpy #$C6 beq pntrpoke cpy #$D8 beq cursypoke jmp leavepoke time1poke: sta $A3 jmp leavepoke time2poke: sta $A4 jmp leavepoke time3poke: sta $A5 jmp leavepoke ndxpoke: sta $EF jmp leavepoke pnt1poke: sta $C8 jmp leavepoke pnt2poke: sta $C9 jmp leavepoke pntrpoke: sta $CA jmp leavepoke cursypoke: sta $CD ignore2poke: jmp leavepoke dorealkeypoke: cpy #$6F bcc ignore2poke cpy #$79 bcc dokeypoke jmp leavepoke dokeypoke: pha tya sec sbc #$48 sta keypoke+1 pla keypoke: sta $0527 jmp leavepoke dorealscreenpoke: pha txa sec sbc #$74 sta screenpoke+2 sty screenpoke+1 pla sta $0C00 jmp leavepoke dorealsoundpoke: cpy #$4B beq checksoundonoff cpy #$48 beq checksoundfreq jmp leavepoke soundon: .byte $00 checksoundonoff: cmp #$10 beq turnsoundon cmp #$00 beq turnsoundoff jmp leavepoke turnsoundon: lda $FF11 ora #$1F sta $FF11 lda #$01 sta soundon jmp leavepoke turnsoundoff: lda $FF11 and #$F0 sta $FF11 lda #$00 sta soundon jmp leavepoke checksoundfreq: cmp #$00 beq nosound sta soundpoke+1 lda #$FF sec soundpoke: sbc #$00 pha and #$C0 lsr lsr lsr lsr lsr lsr sta $FF10 pla and #$20 asl asl sta $FF0E lda soundon cmp #$00 beq pokeback lda $FF11 ora #$1F sta $FF11 pokeback: jmp leavepoke nosound: lda $FF11 and #$F0 sta $FF11 jmp leavepoke peekstart: (load $1300, orig $1300) stx tempx jsr $0473 cmp #$C2 beq checkpeek notpeek: ldx tempx lda #$00 sta $0D jsr $0479 jmp $941E tempx: .byte $00 checkpeek: lda $81 cmp #$80 beq checkrealpeek jmp normalpeek checkrealpeek: jsr $0473 jsr $9485 lda $14 pha lda $15 pha jsr $9DE4 ldx $15 ldy $14 cpx #$00 beq checkzppeek cpx #$01 beq normalpeek cpx #$02 beq checkkeypeek cpx #$03 beq normalpeek cpx #$80 beq checkscreenpeek cpx #$81 beq checkscreenpeek cpx #$82 beq checkscreenpeek cpx #$83 beq checkscreenpeek cpx #$80 bcc translatepeek normalpeek: ldy #$00 sei sta $FF3F lda ($14),y sta $FF3E cli donepeek: tay pla sta $15 pla sta $14 ldx tempx jmp $9A81 checkscreenpeek: jmp dorealscreenpeek checkkeypeek: jmp checkrealkeypeek translatepeek: txa clc adc #$11 sta $15 jmp normalpeek checkzppeek: cpy #$34 beq memsiz1peek cpy #$35 beq memsiz2peek cpy #$8D beq time1peek cpy #$8E beq time2peek cpy #$8F beq time3peek cpy #$9E beq ndxpeek cpy #$C4 beq pnt1peek cpy #$C5 beq pnt2peek cpy #$C6 beq pntrpeek cpy #$D5 beq linelenpeek cpy #$D8 beq cursypeek jmp normalpeek memsiz1peek: lda #$00 jmp donepeek memsiz2peek: lda #$80 jmp donepeek time1peek: lda $A3 jmp donepeek time2peek: lda $A4 jmp donepeek time3peek: lda $A5 jmp donepeek ndxpeek: lda $EF jmp donepeek pnt1peek: lda $C8 jmp donepeek pnt2peek: lda $C9 jmp donepeek pntrpeek: lda $CA jmp donepeek linelenpeek: lda #$27 jmp donepeek cursypeek: lda $CD jmp donepeek checkrealkeypeek: cpy #$6F bcc gonormalpeek cpy #$79 bcc dokeypeek gonormalpeek: jmp normalpeek dokeypeek: tya sec sbc #$48 sta $14 lda #$05 sta $15 jmp normalpeek dorealscreenpeek: txa sec sbc #$74 sta $15 jmp normalpeek