processor 6502 srcPointer = $b5 dstPointer = $b7 dstPointerEnd = $b9 fake_current_byte = $126 count = $128 org $a000 WORD coldstart WORD coldstart BYTE #$41, #$30, #$c3, #$c2, #$cd coldstart SUBROUTINE cld sei jsr $fd8d ; initialize and test RAM jsr $fd52 ; restore default I/O vectors jsr $fdf9 ; initialize I/O registers jsr $e518 ; initialize hardware cli ; enable interrupts lda $0288 sta $0294 jsr $e45b ; initialize BASIC vector table jsr $e3a4 ; initialize BASIC RAM locations jsr $e404 ; print startup message and initialize memory pointers ldx #$fb ; value for stack start txs ; set stack pointer lda #$76 ; set "READY." pointer ldy #$c3 jsr $cb1e ; print null terminated string lda #$80 ; set for control messages only jsr $ff90 ; control kernal messages .oracopio: jsr copycode .almost_ready: ; set current BASIC line number lda #$ff sta $3a lda #0 sta $3b ; set start of variables lda #$ff sta $2d lda #$15 sta $2e jsr clear_color_ram pm: lda #message jsr $cb1e ; jmp . ; lda #0 ; jsr $c871 jmp $c483 ; BASIC fake_input_line: BYTE "RUN", #$0d fake_chrin SUBROUTINE ldy fake_current_byte lda fake_input_line,y iny sty fake_current_byte cpy #4 bne .end_fake_chrin sei lda #$f2 sta $324 lda #$0e sta $325 cli .end_fake_chrin: clc rts clear_color_ram SUBROUTINE lda #$02 ldx #$00 .loop: sta $9600,x sta $9700,x dex bne .loop rts print_message SUBROUTINE ldx #$00 print: lda message,x beq .end sec sbc #$40 sta 7834,x inx jmp print .end: rts copycode SUBROUTINE sei lda #0 sta count sta count + 1 lda #basicdemo sta srcPointer + 1 lda #$01 sta dstPointer lda #$10 sta dstPointer + 1 ldy #0 copyloop: lda (srcPointer),y sta (dstPointer),y inc srcPointer bne .noinc1 inc srcPointer + 1 .noinc1: inc dstPointer bne .noinc2 inc dstPointer + 1 .noinc2: inc count bne .noinc3 inc count + 1 .noinc3: ; LENGTH lda count cmp #$00 bne copyloop lda count + 1 cmp #$06 bne copyloop cli .finito: rts ; lda srcPointer ; cmp #demoend ;.remainder: ; bne copyloop ; rts message: BYTE #$0d,#$0d,"TYPE 'RUN'",#$0d,"THEN WAIT 20 SEC",#$0d,#$0d,#0 basicdemo: .incbin "res/stillenacht.raw" demoend: . = $bfff BYTE #$ff