;:sys36864 ;.opt oo ; assembler-listing 'insert' ; einfuegen und anhaengen von programmzeilen ; nikolaus heusler, XXXXXXXXXXXX XX, X XXXXXXXX XX ; nh-181190-arr ; *= $cec5 ;startadr. 52933 ; konstanten ibas =776 ;befehl ausfuehren tload =$93 ;load-token bload =$e168 ;load-befehl chrget =115 ;zeichen lesen chrgot =121 ;zeichen holen inter =$a7ae ;interpreterschleife basic =$a7e7 ;befehl ausfuehren strout =$ab1e ;textausgabe parget =$e1d4 ;parameter nach load holen sa =185 ;sekundaeradresse load =$ffd5 ;load-routine loaderr =$e19c ;load error error =57593 ;fehlerbehandlung basanf =43 ;startadresse programm basend =45 ;endadresse programm end1 =$e1a7 ;load-befehl beenden end2 =$e1ab ;load-befehl beenden tmp =2 ;unbenutzt latch =160 ;highbyte zwischenspeicher takeline =$a4a2 ;zeile uebernehmen loadvec =$e455 ;basic-vektoren laden status =144 ;i/o status dirvec =770 ;direktmodus-flag konf =1 integer =20 buffer =512 ;hauptprogramm lda #neubef sta ibas sty ibas+1 ;neue befehle einbinden lda #text jmp strout ;text ausgeben ;basic-befehl ausfuehren neubef jsr chrget cmp #tload beq laden jsr chrgot jmp basic ;load bearbeiten ;load-token erkannt laden jsr chrget cmp #"%" beq prozent cmp #"!" beq ausruf ;war normaler load-befehl jmp bload ;programm anhaengen prozent jsr chrget jsr getpar ;titel holen lda basanf pha lda basanf+1 pha ;startadresse retten lda basend ldy basend+1 sec sbc #2 bcs noinc dey ;adr. minus 2 noinc sta basanf sty basanf+1 ;basanf = basend-2 jsr loadfile ;file relativ laden pla sta basanf+1 pla sta basanf ;parameter zurueckholen jsr end1 ;linkpointer berechnen, fertig ;befehl ausgefuehrt fertig jsr chrget jmp inter ;naechsten befehl auswerten ;programm einfuegen ausruf jsr chrget jsr getpar ;pointer erhoehen ldy #latch sta tmp sty tmp+1 ;tmp auf latch richten jsr loadfile ;datei relativ laden lda #cont sta dirvec sty dirvec+1 ;neuer direktmodus-einsprung cont ldy #-1 ;zeiger vor erstes programmbyte loop lda konf and #254 sta konf ;ram unter basic einblenden iny lda (tmp),y ;naechste datei-byte lesen inc konf ;basic einschalten cpy #1 bcc loop ;linkpointer low ueberlesen bne line ;zeilennummer oder basic-text ;linkpointer high pruefen tax bne loop ;programm endet nicht ;programmende ldx #3 jsr loadvec ;direktmodus-vec. korrigieren jsr end2 ;parameter korrigieren jmp fertig ;befehl beendet ;programm lesen line cpy #4 bcs char ;keine zeilennummer sta integer-2,y ;nach 20/21 bringen bcc loop ;und weitermachen ;basiczeile uebertragen char sta buffer-4,y ;nach 512ff bringen tax bne loop ;wenn kein zeilenende, weitermachen ;zeilenende tya adc tmp sta tmp bcc noerh inc tmp+1 ;tmp um y erhoehen noerh iny jmp takeline ;programmzeile speichern ;fileparameter holen getpar jsr parget lda #0 sta sa ;sek.adr null ret rts ;zurueck loadfile tax ;ladeadresse in x/y lda konf and #254 sta konf ;ram unter basic einblenden lda #0 ;load-flag jsr load ;file laden inc konf ;basic einblenden bcc okay ;kein fehler jmp error ;zur fehlerbehandlung okay lda status and #191 ;status okay beq ret ;ja, dann fertig jmp loaderr ;sonst load error text .byt 13 .byte "insert/c 64" .byt 13 .byte " load% -> programm anhaengen" .byt 13 .byte " load! -> programm einfuegen" .byt 13 .byte "nikolaus heusler, 18.11.90 (arr)" .byt 13,0