;:sys36864 ;.opt oo *=52700 cint =$ff81 ioinit =$ff84 restor =$ff8a memtop =$ff99 warm =$a000 cia =$dc00 stack =$100 cursor =$286 ierr =$300 inmi =$318 ibsout =$326 vic =$d000 ret1 =127 ret2 =223 bank =$dd00 port =1 strout =$ab1e ; initialisierung lda ierr+1 cmp #>direct beq nein sei jsr restor lda ierr sta far1+1 sta far5+1 lda ierr+1 sta far1+2 sta far5+2 lda ibsout sta far2+1 sta far6+1 lda ibsout+1 sta far2+2 sta far6+2 lda inmi sta far3+1 sta far7+1 lda inmi+1 sta far3+2 sta far7+2 lda #direct sta ierr+1 lda #0 sta resto1 sta resto2 lda #hi jmp strout nein rts ; variablen memsp brk mem01 .byt $37 resto1 brk resto2 brk memba brk ; einschaltmeldung hi .byt 13 .byte "emergency-basic v1" .byt 13 .byte "(c) n. heusler 12.91" .byt 13,13 .byte "\x12cbm\x1drestore\x92" .byt 13,0 ; c64 i - direktmodus direct pha lda #0 sta resto1 lda #out sta ibsout+1 pla far1 jmp 0 ; c64 i - zeichenausgabe out php sei pha lda #int sta inmi+1 pla plp far2 jmp 0 ; c64 i - nmi int pha txa pha tya pha lda resto1 beq nopress nonmi pla tay pla tax pla far3 jmp 0 nopress jsr taste cmp #ret2 bne nonmi inc resto1 prell jsr taste cmp #-1 bne prell ; umschalten auf c64 ii lda port sta mem01 lda bank sta memba lda #$30 sta port lda #0 ldy #$d0 ldx #$28 jsr copy lda #$37 sta port ldy #0 save lda $d800,y sta $f800,y lda $d900,y sta $f900,y lda $da00,y sta $fa00,y lda $db00,y sta $fb00,y lda vic,y sta $fc00,y iny bne save tsx stx memsp ldx #-1 txs jsr ioinit jsr restor ldx #0 ldy #$28 clc jsr memtop jsr cint lda #print sta ibsout+1 cli jmp (warm) ; c64 ii - direktmodus error pha lda #0 sta resto2 lda #print sta ibsout+1 pla far5 jmp 0 ; c64 ii - zeichenausgabe print pha lda #nmi sta inmi+1 lda #error sta ierr+1 pla far6 jmp 0 ; c64 ii - nmi nmi sei pha lda resto2 bne esc inc resto2 jsr taste cmp #ret2 bne esc loslass jsr taste cmp #-1 bne loslass ; umschalten auf c64 i lda #$30 sta port lda #$d2 ldy #2 ldx #$26 jsr copy ldy #0 kopier lda #$30 sta port lda $d100,y sta stack,y lda vic,y sta !0,y lda #$35 sta port lda $f800,y sta $d800,y lda $f900,y sta $d900,y lda $fa00,y sta $da00,y lda $fb00,y sta $db00,y iny bne kopier load lda $fc00,y sta vic,y iny cpy #47 bne load lda vic+$11 and #$7f sta vic+$11 lda memba sta bank lda mem01 sta port ldx memsp txs lda #0 sta resto1 pla tay pla tax esc pla far7 jmp 0 ; speicherbereich kopieren copy sta hier+2 sty dort+2 ldy #0 hier lda !0,y dort sta !0,y iny bne hier inc hier+2 inc dort+2 dex bne hier rts ; liest tastatur taste lda #ret1 sta cia wait lda cia+1 nop nop cmp cia+1 bne wait rts