;:sys36864 ;.opt oo *= 49152 jmp init irqvec =$314 nmivec =$318 nmiflag =$dd0d nmi232 =$fe72 irqinit =$fda3 vicinit =$e518 clrchn =$ffcc device =$13 vic =$d000 frame =vic+32 screen =frame+1 warm =$a002 write =$ffd2 ioinit =$ff8a tmp =2 ga =186 prompt =">" read =$ffcf buffer =828 return =$aad7 cr =13 frage =$ab45 altirq =$ea31 ink =646 font =vic+24 crs1 =204 crs2 =205 crs3 =207 getk =$ffe4 keys =198 axout =$bdcd open =$ffc0 close =$ffc3 fnadr =$bb sa =$b9 lf =$b8 fnlen =$b7 nr =123 gaens =212 chkin =$ffc6 space =$ab3f setcr =58732 spalte =211 listen =$ffb1 talk =$ffb4 seclist =$ff93 sectalk =$ff96 unlist =$ffae untalk =$ffab iecin =$ffa5 iecout =$ffa8 ioerr =157 shift =$28d tb =28 key =203 scnkey =$ff9f ts =13 tq =62 geraus =$f1d5 geraet =$9a wrtvec =$326 writold =$f1ca konf =1 char1 =$e5cb char2 =$e670 loglen =213 bild =$d1 tc =20 tk =37 tx =23 setx =$e9f0 zeile =214 tu =30 clrx =$e9ff tr =17 load =$ffd5 getstat =$ffb7 tg =26 repeat =650 trenn =":" ti =33 mem =43 prgflag =$9d inter =$a7ae restore =$a659 sys =$e130 int =$14 resvec =$fffc status =144 z24a =$e508 z24b =$e6d0 z23a =$e55f z24c =$e882 z24d =$e8c5 z23b =$e904 z23c =$e970 z24e =$e98e z22a =$e9aa maxz =23 zehntel =$dc08 sekunde =zehntel+1 minute =sekunde+1 stunde =minute+1 trigger =stunde+3 set =trigger+1 page =648 sprite =704 mob1x =vic mob1y =vic+1 mob2x =vic+2 mob2y =vic+3 expx =vic+29 select =vic+21 colr1 =vic+39 colr2 =vic+40 hix =vic+16 getkey =65508 farb =253 te =14 tf =21 scroll =$e8ea home =$e566 zelle =$ac mob3x =vic+4 mob3y =vic+5 colr3 =vic+41 des1 .byte "show a directory" .byt 0 des2 .byte "switch off ed &\xa0quit" .byt 0 des3 .byte "exit to basic" .byt 0 des4 .byte "show errorchn" .byt 0 des5 .byte "send disk cmd" .byt 0 des6 .byte "set drive nr" .byt 0 des7 .byte "exec file" .byt 0 des8 .byte "statement list" .byt 0 desa .byte "describe statem." .byt 0 desb .byte "stop by cbm/b on/off" .byt 0 desc .byte "set tabulator" .byt 0 desd .byte "run mc program" .byt 0 dese .byte "autoload on/off" .byt 0 desf .byte "systemreset" .byt 0 desg .byte "rename file" .byt 0 desh .byte "erase file" .byt 0 desi .byte "set time" .byt 0 destab .word des1,des2,des3,des4 .word des5,des6,des7,des8,des7 .word desa,desb,desc,desd,dese .word desf,desg,desh,desi ppt .byt 0 ; ascii der drivenr drive .byt 8 ; drivenr next .byt 0 ; lesezeiger quot .byt 0 ; "" - flag fnd .byt 0 ; file in dir vorhand lst .byt 0 ; last key mem1 .byt 0 ; memory mem2 .byt 0 ; memory len .byt 0 ; laenge eingabezeile lflag .byt 0 ; load/exec/run flag break .byt 1 ; abbr. mit cbm c tab .byt 8 ; tabulator boot .byt 0 ; exec bzw load flag autof .byt 1 ; flag fuer autoload hpls .byt 0 ; flag list/help stell .byt 0 ; flag editirq on/off morez .byt 0 ; zeilennr fuer 'more' stm1 .byte "dir" .byt 0 stm2 .byte "quit" .byt 0 stm3 .byte "exit" .byt 0 stm4 .byte "disk" .byt 0 stm5 .byte "cmd" .byt 0 stm6 .byte "drive" .byt 0 stm7 .byte "exec" .byt 0 stm8 .byte "list" .byt 0 stm9 .byte "load" .byt 0 stma .byte "help" .byt 0 stmb .byte "stop" .byt 0 stmc .byte "tab" .byt 0 stmd .byte "go" .byt 0 stme .byte "auto" .byt 0 stmf .byte "reset" .byt 0 stmg .byte "ren" .byt 0 stmh .byte "era" .byt 0 stmi .byte "time" .byt 0 sad .word stm1 .word stm2 .word stm3 .word stm4 .word stm5 .word stm6 .word stm7 .word stm8 .word stm9 .word stma .word stmb .word stmc .word stmd .word stme .word stmf .word stmg .word stmh .word stmi .word 0 bad .word dir .word quit .word exit .word errorchn .word cmd .word setdrive .word exec .word list .word exec .word help .word stop .word tabset .word go .word auto .word reset .word rename .word erase .word time mess .byt cr .byte "\x93\x99\x08\x0eNSS CP/M Simulator by NH 020286\x11" .byt cr,0 yes .byte "YES" .byt 0 no .byte "NO" .byt 0 derr .byte "\x12DOS ERROR !!" .byt cr,0 dirt .byte "Directory of Disk: " .byt 0 miss .byte "\x12File missing !" .byt cr,0 mask .byte "Dir Mask: *\x9d" .byt 0 id .byte "ID: " .byt 0 os .byte "OS: " .byt 0 bl .byte "Bl. " .byt 0 frei .byte "free." .byt cr,0 sure .byte "Are you sure ? [Y/N] " .byt 0 start .byte "Start at $" .byt 0 start2 .byte " ? [Y/N] " .byt 0 lerr .byt cr .byte "\x12LOAD ERROR !!" .byt cr,0 trotz .byte "Load without start ? [Y/N] " .byt 0 valid .byte "Included statements:" .byt cr,0 on .byte "on" .byt 0 off .byte "off" .byt 0 para .byte "\x12Parameter illegal !" .byt cr,0 run .byte "Run as BASIC program ? [Y/N] " .byt 0 switch .byte "Switch off CP/M Editor ? [Y/N] " .byt 0 post .byte "Trying to load " .byt 0 new .byte "New drive --> " .byt 0 devmiss .byte "\x12DEVICE MISSING !" .byt 13,0 setup .byt cr .byte "Set time ! Use:" .byt cr .byte "\x11 \x12 f1 \x92 up\x11" .byt cr .byte " \x12 f5 \x92 go ahead" .byt cr .byte " \x12 f7 \x92 init clock & back\x11" .byt cr,0 more .byte "more" prmt lda drive clc adc #185 sta ppt jsr write lda #prompt jmp write input ldx #0 getchr jsr read cmp #cr beq red sta buffer,x inx bne getchr red lda #0 sta buffer,x jmp return get ldx next lda buffer,x php inc next plp rts init lda #nmi sta nmivec sty nmivec+1 lda #irq sta irqvec sty irqvec+1 lda #wrt sta wrtvec sty wrtvec+1 anfang lda #0 sta frame sta screen sta boot lda #64 sta ioerr lda #mess jsr strout jsr rom lda #128 sta repeat jsr uhrinit jsr faerb jsr mobset eingabe jsr prmt jsr input auswert jsr bufmake jsr get beq eingabe cmp #"x" bne notx jmp exit notx cmp #"q" bne notq jmp quit notq ldx #255 search inx txa asl tay lda sad,y sta tmp lda sad+1,y sta tmp+1 bne nofin lda tmp bne nofin jmp budr wrong2 lda autof beq er wrong jsr nachlad bcs eingabe er jsr error jmp eingabe nofin ldy #255 buch iny lda (tmp),y beq found cmp buffer,y beq buch jmp search found txa asl tay lda bad,y sta tmp lda bad+1,y sta tmp+1 jsr gomp bcc stmwrong lda boot bne na jmp eingabe stmwrong lda #para jsr strout jmp wrong2 na lda #0 sta boot lda #post jsr strout lda #buffer jsr strout jsr return jmp wrong budr lda buffer cmp #"8" bcc nix bne grs8 lda #8 bne set1541 grs8 cmp #"9" bne grs9 lda #9 bne set1541 grs9 cmp #"a" bcc nix cmp #"f" bcs nix sec sbc #57 set1541 tax lda buffer+1 cmp #trenn bne nix jsr dress ldx #0 ldy #2 schieb lda buffer,y sta buffer,x beq after iny inx bne schieb after jmp auswert dress lda drive pha stx drive jsr newdr bcs ging pla sta drive rts ging pla rts nix jmp wrong2 nachlad jsr testdr bcc laderr lda drive sta ga lda #0 sta sa lda #nr sta lf lda len sta fnlen lda #buffer sta fnadr+1 jsr open lda drive jsr talk lda #$6f sta sa jsr sectalk jsr iecin pha rest jsr iecin cmp #cr bne rest pla cmp #"0" beq gefunden lda #nr jsr close laderr clc rts gefunden ldx #nr jsr chkin jsr getk sta tmp jsr getk sta tmp+1 jsr clrchn lda #nr jsr close jsr bastest bcs weiter lda #start jsr strout lda tmp+1 jsr hexout lda tmp jsr hexout lda #start2 jsr strout jsr janein bcc trotzdem lda #255 sta lflag weiter lda #1 sta sa jsr safety lda #0 jsr load jsr getstat and #$bf beq loadok lda #lerr jsr strout sec rts loadok lda lflag beq fertig bpl runprg jsr gomp fertig sec rts trotzdem lda #trotz jsr strout jsr janein bcc fertig lda #0 sta lflag jmp weiter bastest lda tmp cmp mem beq fmem sureno clc rts fmem lda tmp+1 cmp mem+1 bne sureno lda #run jsr strout jsr janein bcc sureno lda #2 sta lflag sec rts ret rts runprg lda #0 sta prgflag jsr restore jmp inter safety lda #switch jsr strout jsr janein bcc ret jmp swoff nmi pha txa pha tya pha lda #$7f sta nmiflag ldy nmiflag bpl no232 jmp nmi232 no232 lda #1 sta crs1 lda #0 sta keys lda #nr jsr close jsr irqinit jsr vicinit jsr clrchn lda #0 sta device ldx #$fd txs jmp anfang exit jmp (warm) quit jsr swoff jmp (warm) swoff lda #55 sta konf sei jsr ioinit cli rts strout sta quot lda tmp pha lda tmp+1 pha lda quot sta tmp sty tmp+1 ldy #0 out lda (tmp),y beq schluss jsr write inc tmp bne out inc tmp+1 bne out schluss pla sta tmp+1 pla sta tmp rts bufmake ldx #0 ldy #0 stx quot make lda buffer,x beq finish bit quot bpl noquote sta buffer,y inx iny cmp #34 bne make lda quot eor #255 sta quot dey jmp make noquote cmp #34 bne noturn lda quot eor #255 sta quot inx bne make noturn inx cmp #32 beq make cmp #prompt beq make cmp ppt beq make cmp #"A" bcc geht cmp #"Z"+1 bcs geht sec sbc #128 geht sta buffer,y iny jmp make finish lda #0 sta next sta buffer,y sty len notctrl rts irq jsr neuirq jmp altirq neuirq lda #13 sta ink lda #23 sta font jsr uhrshow lda stell beq editon rts editon lda shift and #2 beq notctrl lda key cmp lst beq notctrl sta lst cmp #ts bne nos wait jsr scnkey lda shift and #2 beq wait lda key cmp #tq bne wait nos cmp #tb bne nob lda spalte beq spa0 lda #0 sta spalte rts spa0 ldy loglen such lda (bild),y cmp #32 bne fe dey bne such fe iny sty spalte jmp noctrl nob cmp #tc bne noc lda break beq notctrl jmp nmi noc cmp #tk bne nok lda #32 ldy spalte clr sta (bild),y iny cpy loglen beq clr bcc clr jmp noctrl nok cmp #tx bne nox jsr aktual jsr faerb ldy #0 sty mem1 ldy spalte rechts lda (bild),y sty mem2 ldy mem1 sta (bild),y ldy mem2 iny inc mem1 cpy loglen bcc rechts ldy #0 sty spalte ldy mem1 lda #32 jmp clr nox cmp #tu bne nou ldx zeile jsr clrx cpx #maxz bcs nctrl inc zeile jsr aktual nctrl jmp noctrl nou cmp #tr bne nor ldx zeile cpx #maxz bcs noctrl jsr faerb lda bild sta tmp lda bild+1 sta tmp+1 ldx zeile inx inc zeile jsr setx ldy #0 copdwn lda (tmp),y sta (bild),y iny cpy spalte beq copdwn bcc copdwn rts nor cmp #tg bne nog ldy spalte inst iny lda (bild),y dey sta (bild),y iny cpy loglen bcc inst lda #32 sta (bild),y jsr faerb jmp noctrl nog cmp #ti bne noi lda spalte sec totab sbc tab bcs totab eor #255 adc #1 clc adc spalte tilt cmp loglen bcc good beq good sec sbc loglen sbc #1 jmp tilt good sta spalte rts noi cmp #te bne noe lda stunde sta stunde jmp noctrl noe cmp #tf bne noctrl lda zehntel sta zehntel noctrl rts janein lda #0 sta keys sta crs1 yn jsr getk cmp #"j" beq ja cmp #"y" beq ja cmp #"n" bne yn jsr caus lda #no jsr strout jsr return clc rts ja jsr caus lda #yes jsr strout jsr return sec rts caus lda #1 sta crs2 waus lda crs3 bne waus lda #1 sta crs1 rts errorchn lda #0 sta status lda drive sta ga jsr talk lda #$6f sta sa jsr sectalk ldx #0 hol jsr iecin cmp #cr beq holt sta buffer,x inx bne hol holt lda #0 sta buffer,x jsr untalk lda buffer cmp #"0" beq noerr lda #derr jsr strout noerr lda #buffer jsr strout jsr return sec rts cmd lda #3 sta next jsr get cmp #trenn beq cm clc rts cm lda drive sta ga jsr listen lda #$6f sta sa jsr seclist jsr wirklich bcc aeae cmp #0 beq outed jsr iecout cmout jsr get beq outed jsr iecout jmp cmout outed jsr unlist jmp errorchn aeae jsr unlist sec rts wirklich jsr get cmp #"s" beq atn cmp #"n" beq atn sec rts atn pha lda #sure jsr strout jsr janein pla rts setdrive lda #5 sta next jsr get cmp #trenn beq dr fehl clc rts dr jsr get cmp #"8" bcc fehl bne no8 lda #8 bne sd no8 cmp #"9" bne no9 lda #9 bne sd no9 cmp #"a" bcc fehl cmp #"f" bcs fehl sec sbc #57 sd tax jsr dress sec rts wrt pha lda geraet cmp #3 beq schirm jmp geraus schirm pla print cmp #161 bcs nowert cmp #156 bcs gut cmp #149 bcs nowert gut jmp writold nowert cmp #192 bcs gut clc rts rom lda #55 sta konf lda #160 jsr copy lda #224 jsr copy lda #print sta char1 sta char2 sty char1+1 sty char2+1 jsr setscreen lda #53 sta konf rts copy sta tmp+1 ldy #0 sty tmp ldx #32 coplop lda (tmp),y sta (tmp),y iny bne coplop inc tmp+1 dex bne coplop rts error lda #buffer jsr strout jsr frage jmp return gomp jmp (tmp) dir lda drive sta ga lda #nr sta lf lda #0 sta sa sta fnd lda #mask jsr strout jsr input lda #"$" sta buffer-3 lda #"0" sta buffer-2 lda #":" sta buffer-1 lda #buffer-3 sta fnadr sty fnadr+1 inx inx inx stx fnlen jsr open ldx #nr jsr chkin lda #dirt jsr strout lda #1 sta gaens title jsr read cmp #34 bne title tit jsr read cmp #34 beq gottit jsr write jmp tit gottit lda #":" jsr write jsr return jsr read ldx #15 sp1 jsr space dex bne sp1 lda #id jsr strout jsr read jsr write jsr read jsr write jsr return ldx #15 sp2 jsr space dex bne sp2 lda #os jsr strout jsr read jsr read jsr write jsr read jsr write jsr return link jsr read bne link line jsr read jsr read jsr read sta tmp jsr read ldx tmp jsr axout jsr blocks text jsr read beq eofline jsr write lda #1 sta fnd bne text eofline jsr return jmp line blocks lda #4 sta spalte jsr setcr lda #bl jsr strout spa jsr read cmp #32 beq spa cmp #34 bne last jmp write last lda #frei jsr strout pla pla lda fnd bne gefund lda #miss jsr strout gefund jsr clrchn lda #nr jsr close sec rts faerb lda #216 sta farb+1 ldy #0 sty farb ldx #4 lda #13 far sta (farb),y iny bne far inc farb+1 dex bne far rts aktual ldx zeile jmp setx hexout pha lsr lsr lsr lsr jsr ascii pla ascii and #$f cmp #10 bcc kleiner adc #6 kleiner adc #"0" jmp write show lda #valid jsr strout ldx #0 listloop txa asl tay lda sad,y sta tmp lda sad+1,y sta tmp+1 bne weitlist lda tmp bne weitlist sec rts weitlist jsr space ldy tmp+1 lda tmp jsr strout lda hpls beq nurlist lda #10 sta spalte stx tmp jsr setcr ldx tmp txa asl tay lda destab,y pha lda destab+1,y tay pla jsr strout nurlist jsr return inx jmp listloop list lda #0 beq heli help lda #1 heli sta hpls jmp show exec ldy #0 ldx #4 stx next jsr get cmp #trenn bne noexec ldx next vor lda buffer,x sta buffer,y inx iny cmp #0 bne vor dey sty len sty boot tya beq noexec sec rts noexec lda #"!" sta buffer lda #0 sta buffer+1 lda #1 sta len clc rts stop lda #4 sta next jsr get cmp #trenn beq okstop clc rts okstop ldy #255 teston iny lda on,y beq qon cmp buffer+5,y beq teston ldy #255 testoff iny lda off,y beq qoff cmp buffer+5,y beq testoff clc rts qon lda #1 bne setbk qoff lda #0 setbk sta break sec rts tabset lda #3 sta next jsr get cmp #trenn beq oktab false clc rts oktab jsr get sta tmp jsr get cmp #"0" bcc false cmp #"9"+1 bcs false sec sbc #"0" sta tmp+1 lda tmp cmp #"0" bcc false beq kl10 cmp #"1" bne false lda tmp+1 clc adc #10 sta tab sec rts kl10 lda tmp+1 beq false sta tab sec rts hexoma jsr get cmp #"0" bcs ueb0 hexerr clc rts ueb0 cmp #"9"+1 bcs noziff sec sbc #"0" sec rts noziff cmp #"a" bcc hexerr cmp #"g" bcs hexerr sec sbc #"a"-10 sec rts hexin jsr hexoma bcc hexerr asl asl asl asl sta mem2 jsr hexoma bcc hexerr clc adc mem2 sec rts reset jsr atn bcs wdw sec rts wdw lda #55 sta konf jmp (resvec) go ldx #2 stx next jsr get cmp #trenn bne hexerr jsr hexin bcc hexerr sta int+1 jsr hexin bcc hexerr sta int jsr sys sec rts auto lda #4 sta next jsr get cmp #trenn bne was ldy #255 tston iny lda on,y beq hon cmp buffer+5,y beq tston ldy #255 tstoff iny lda off,y beq hoff cmp buffer+5,y beq tstoff was clc rts hon lda #1 bne setau hoff lda #0 setau sta autof sec rts newdr lda #new jsr strout lda drive clc adc #185 jsr write jsr return testdr lda #0 sta status lda drive sta ga jsr listen lda #$6f sta sa jsr seclist lda #"i" jsr iecout lda #"0" jsr iecout jsr unlist lda status bpl driveda lda #devmiss jsr strout clc rts driveda sec rts rename lda #3 sta next jsr get cmp #trenn beq doren renerr clc rts doren lda drive sta ga jsr listen lda #$6f sta sa jsr seclist lda #"r" diskstat jsr iecout lda #"0" jsr iecout lda #":" jsr iecout ldx next dorena stx tmp lda buffer,x beq endren jsr iecout ldx tmp inx bne dorena endren jsr unlist jmp errorchn erase lda #3 sta next jsr get cmp #trenn bne renerr jsr atn bcs maches sec rts maches lda drive sta ga jsr listen lda #$6f sta sa jsr seclist lda #"s" jmp diskstat setscreen ldx #maxz-1 stx z22a inx stx z23c stx z23b stx z23a inx stx z24e stx z24d stx z24c stx z24b stx z24a lda #76 sta scroll lda #newsc sta scroll+2 lda #76 sta home lda #homenew sta home+2 rts homenew ldy #0 sty zeile sty spalte sty morez jmp setcr newsc inc morez lda morez cmp #maxz bcs ereicht scrollold lda zelle pha jmp scroll+3 ereicht lda tmp pha lda tmp+1 pha lda page clc adc #3 sta tmp+1 lda #192 sta tmp ldy #3 showmr lda more,y sta (tmp),y dey bpl showmr iny sty keys sty morez moreak lda keys beq moreak lda #32 ldy #3 showweg sta (tmp),y dey bpl showweg iny sty keys pla sta tmp+1 pla sta tmp jmp scrollold uhrinit lda trigger ora #$80 sta trigger lda set and #$7f sta set lda #0 sta stunde sta minute sta sekunde sta zehntel sta stell ldy #29 lda #99 strich sta 1984,y dey bpl strich sec rts uhrshow lda tmp pha lda tmp+1 pha lda page clc adc #3 sta tmp+1 lda #222 sta tmp ldy #0 lda stunde cmp #$12 beq nulluhr cmp #$80 bcc stdout and #$7f cmp #$12 beq stdout sed clc adc #$12 cld bne stdout nulluhr lda #0 stdout jsr stelle lda minute jsr stelle lda sekunde jsr stelle lda zehntel ora #"0" jsr stelle1 pla sta tmp+1 pla sta tmp rts stelle pha and #$f0 lsr lsr lsr lsr clc adc #"0" jsr stelle1 pla and #$f clc adc #"0" jsr stelle1 lda #":" stelle1 sta (tmp),y iny rts mobset ldy #63 lda #0 loesch sta sprite,y dey bpl loesch lda #7 sta select sta expx and #3 sta hix lda #255 ldy #2 zx sta sprite,y dey bpl zx lda #13 sta colr1 sta colr2 sta colr3 lda #248 sta tmp lda page clc adc #3 sta tmp+1 lda #11 ldy #0 sta (tmp),y iny sta (tmp),y iny sta (tmp),y lda #242 sta mob1y sta mob2y sta mob3y lda #8 sta mob1x lda #56 sta mob2x lda #10 sta mob3x rts time lda #setup jsr strout lda #1 sta stell lda stunde sta stunde jsr farhr keyhol jsr getkey cmp #"\x88" bne n7 uin jsr faerb jmp uhrinit n7 cmp #"\x85" bne n1 lda stunde pha and #$90 sta tmp pla and #$f jsr test11 cmp #12 bcs ac12 cmp #10 bcc gl10 sec sbc #10 ora #16 gl10 ora tmp sta stunde jmp keyhol ac12 lda tmp eor #128 sta stunde jmp keyhol n1 cmp #"\x87" bne keyhol lda #0 sta tmp+1 jsr farsemi keyhol2 jsr getkey cmp #"\x88" beq uin cmp #"\x87" bne nof5 lda tmp+1 beq sek jsr faerb lda #0 sta zehntel sta stell sec rts sek inc tmp+1 jsr farsemi bne keyhol2 nof5 cmp #"\x85" bne keyhol2 lda tmp+1 bne ssek lda minute clc bcc smin ssek lda sekunde smin pha and #240 sta tmp pla and #15 clc adc #1 cmp #10 bcs at10 ora tmp put pha lda tmp+1 bne stsek pla sta minute jmp keyhol2 stsek pla sta sekunde jmp keyhol2 at10 lda tmp lsr lsr lsr lsr clc adc #1 cmp #6 bcc kl6 lda #0 beq put kl6 asl asl asl asl jmp put farhr jsr faerb lda #2 sta $dbde sta $dbdf rts farsemi jsr faerb ldx #2 lda tmp+1 bne sekunfa stx $dbe1 stx $dbe2 rts sekunfa stx $dbe5 stx $dbe4 rts test11 tax lda tmp and #16 beq zy1 txa clc adc #10 tax zy1 lda tmp and #128 sta tmp inx txa rts