;:sys36864 ; eisberg ; ; nikolaus heusler 5.92 ; XXXXXXXXXXXX XX ; XXXX XXXXXXXX XX ; ;.opt oo *= 51200 ; rom ins ram kopieren sei ;interrupt aus lda #47 sta 0 lda #55 sta 1 ;rom einschalten lda #160 jsr copy ;basic-interpreter lda #224 jsr copy ;kernal jsr modify ;modifizieren lda #53 sta 1 ;ram einschalten lda #hi cli jmp $ab1e ;einschaltmeldung ausgeben ; kopier-routine copy ldx #32 ;anz. pages sta 3 ;highbyte ldy #0 sty 2 ;lowbyte loop lda (2),y ;byte aus rom lesen sta (2),y ;und ins ram schreiben iny bne loop ;eine page bearbeiten inc 3 dex bne loop ;naechste page rts ; einschaltmeldung hi .byt 13 .byte "eisberg - nie wieder basic-fehler" .byt 13,13 .byte "nikolaus heusler, muenchen 5.92" .byt 13,0 ; ram-kernal modifizieren modify lda #tab ;zeiger auf adress-tabelle sta 2 sty 3 ; befehle loeschen load ldy #0 lda (2),y sta 4 ;lowbyte adresse merken iny lda (2),y sta 5 ;highbyte lda 4 ora 5 ;tabellenende pruefen beq ende ;ja, dann fertig iny lda (2),y ;anz. bytes-1 tay lda #234 ;nop fill sta (4),y ;in ram schreiben dey bpl fill lda 2 clc adc #3 sta 2 bcc load inc 3 bne load ; ram-kernal modifizieren ende lda #jum ;zeiger auf adress-tabelle sta 2 sty 3 ; sprungbefehle einbauen lade ldy #0 lda (2),y sta 4 ;lowbyte adresse merken iny lda (2),y sta 5 ;highbyte lda 4 ora 5 ;tabellenende pruefen beq fini ;ja, dann fertig lda #76 ;jmp ldy #0 sta (4),y ;ins ram ldy #2 lda (2),y ;sprungadresse low dey sta (4),y ;ins ram ldy #3 lda (2),y ;sprungadresse high dey sta (4),y ;ins ram lda 2 clc adc #4 sta 2 bcc lade inc 3 bne lade ; sonstige veraenderungen fini lda #56 ;sec sta $a8c4 ;undef'd statement lda #96 ;rts sta $acf4 ;extra ignored sta $ad9b ;type mismatch sta $b3a9 ;illegal direct sta $e1d1 ;fehler bei open und close sta $baf6 ;overflow bei mal 10 sta $b3ae ;undef'd function error lda #$1f ;zeiger auf rts sta $311 ;usr-zeiger sta $e3c7 ;im system lda #$a2 sta $baeb ;ldx #0 lda #$00 sta $baec ;mal 10 lda #$86 sta $baed ;stx $6f lda #$6f sta $baee lda #$a2 sta $baef ;ldx #$69 lda #$69 sta $baf0 ldx #5 ;ausweichroutine erzeugen stx $b78f ;leerstring bei asc lauf lda rucksack,x sta $a19e,x ;bereich fehlermeldungstexte dex bpl lauf lda #53 sta $fdd6 ;ram fixieren rts ; adressen-tabelle (befehle loeschen) tab =* .word $bb12 .byt 1 ;division by zero .word $a3fe .byt 1 ;out of memory bei stack-ueberlauf .word $a405 .byt 1 ;out of memory bf .word $a405 .byt 1 ;out of memory bei stack-ueberlauf .word $a42e .byt 1 ;out of memory .word $a6a2 .byt 1 ;syntax error list .word $a6b1 .byt 1 ;syntax error list .word $a6b9 .byt 1 ;syntax error list .word $a85f .byt 2 ;can't continue .word $a8c3 .byt 0 ;undef'd statement .word $a955 .byt 1 ;kein goto hinter on .word $a97d .byt 1 ;basiczeilen uegeter 63999 .word $a9e5 .byt 1 ;ti$ laenge ungleich 6 .word $aa24 .byt 2 ;nur ziffern in ti$ .word $ab04 .byt 1 ;klammer zu hinter tab/pos .word $ac9a .byt 2 ;typ mismatch input/get/read .word $acc4 .byt 1 ;out of data .word $adcd .byt 1 ;vgl. operatoren auswertung .word $b09c .byt 2 ;ziffern als var.namen .word $b0ca .byt 1 ;integer-var. gesperrt .word $b138 .byt 2 ;zuweisung an ti .word $b141 .byt 1 ;zuweisung an st .word $b1bd .byt 1 ;index negativ z.b. a(-1) .word $b1cc .byt 1 ;integer groesser 32768 .word $b251 .byt 1 ;redim'd array .word $b25c .byt 1 ;anz. indizes falsch .word $b300 .byt 1 ;bad subscript .word $b308 .byt 2 ;bad subscript .word $b2ac .byt 1 ;ueber 256 dimensionen .word $b2b7 .byt 1 ;array zu gross .word $b30b .byt 2 ;bad subscr./out of memory .word $b365 .byt 1 ;array zu gross .word $b376 .byt 1 ;array zu gross .word $b446 .byt 2 ;syntax error bei fn .word $b4d0 .byt 4 ;formula too complex .word $b51a .byt 1 ;stringspeicher voll .word $b658 .byt 4 ;string too long .word $b74b .byt 1 ;erster para. bei mid$ null .word $b7a6 .byt 1 ;byte groesser 255 .word $b7f9 .byt 1 ;adresse negativ .word $b7ff .byt 1 ;adresse groesser 65535 .word $b93a .byt 1 ;overflow bei addition .word $b9f1 .byt 2 ;log-argument null/negativ .word $bac0 .byt 1 ;overflow bei multiplikation .word $bad8 .byt 1 ;overflow bei multiplikation .word $bb23 .byt 1 ;overflow bei division .word $bd93 .byt 12 ;exponenten-ueberlauf .word $e10f .byt 1 ;bsout-fehler .word $e115 .byt 1 ;basin-fehler .word $e11b .byt 1 ;ckout-fehler .word $e121 .byt 1 ;chkin-fehler .word $e127 .byt 1 ;getin-fehler .word $e19c .byt 4 ;load error .word $e185 .byt 1 ;verify error .word $e162 .byt 1 ;fehler bei save .word $e178 .byt 1 ;fehler bei load .word 0 ; adressen-tabelle (jump-befehle) jum =* .word $a8e5,$a19e ;return without gosub .word $a56d,$a562 ;eingabezeile zu lang .word $a80b,$a19e ;syntax error doppelpkt. fehlt .word $af0a,$a19e ;syntax error allg. .word $ad30,$a19e ;next without for .word 0 ; ausweichroutine rucksack jsr $a8f8 ;data-befehl jmp $a7ae