/**************************************************************************** OS/A65 Version 2.0.0 Multitasking Operating System for 6502 Computers Copyright (C) 1989-1998 Andre Fachat This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ****************************************************************************/ /* * This is the real monitor part of the program. * Most stuff has just been taken over from the @MON program, * which you can see by the all-capital writing. * */ .( .zero Z1 .word 0 Z2 .word 0 Z3 .word 0 .data ABPZ .byt 0 .text #ifndef NOSYSFKT .zero Z0 .word 0 .text #endif #ifndef SHORTMON .zero ZEI .word 0 ; MON TSERO, ASS Z4 .word 0 ; U(D) Z5 .word 0 ; U(D) Z6 =ZEI ; U(D) .data LEN .byt 0 ; U/D/A STBYT .byt 0 ; U/D/A NR .byt 0 ; U/D/A INP =Z4+1 ; A .text #endif .data BRKPC .word 0 BRKSR .byt 0 BRKSP .byt 0 BRKAC .byt 0 BRKXR .byt 0 BRKYR .byt 0 .text MA =1 MB =3 MEBYT ="," MEASS =";" MEREG ="+" MESSAGE =">" IGNORESIGN ="-" 30000 ;******************************** 30001 ;MONITOR-PROGRAMM 30002 ;******************************** &MONITOR tsx dex dex stx BRKSP #ifndef SHORTLINE lda #16 #else lda #8 #endif STA ABPZ lda #<M0TXT ldy #>M0TXT jsr TSERO JSR BR MXL #ifndef NOSYSFKT jsr oldoutstr #endif JSR CRLFOUT:LDA #MESSAGE JSR SEROUT JSR MLINEIN:bcs termmon linex jsr CHRGOT:beq MXL:bne mx1 MO0 jsr CHRGET:beq MXL mx1 CMP #MESSAGE:BEQ MO0 jsr TOUPPER LDX #0:MO3 CMP MONBEF,X:BEQ MO4 INX:CPX #ANZBEF:BCC MO3 JSR ERR JMP MXL MOX pla pla termmon #ifndef NOSH rts #else #ifdef RETRTS rts #else jmp TERM #endif #endif ERR LDA #<M3TXT:LDY #>M3TXT:JSR TSERO:SEC:RTS MO4 INC LZEI JSR MOEX JMP MXL MOEX TXA:ASL:TAX:LDA MONADR+1,X PHA:LDA MONADR,X:PHA:RTS #ifdef SHORTMON BA BD BGD BU jmp ERR #endif #ifndef NOSYSFKT .( &MOY ldy LZEI lda IOBUF,y beq xERR inc LZEI ldy #0 jsr TOUPPER y1 cmp ybef,y beq yok iny cpy #anzy bcc y1 xERR jmp ERR yok tya asl tax lda yadr+1,x pha lda yadr,x pha rts anzy =11 ybef .asc "DMFSREPWVGC" yadr .word MOB-1,MOgetmem-1,MOfremem-1 .word MOgetstr-1,MOfrestr-1 .word MOgetenv-1,MOfork-1 .word MOpsem-1,MOvsem-1 .word MOgetblk-1,DIRECTORY-1 MOgetblk jsr GETADR:bcs xERR tax jsr GETBLK jmp show MOB JSR GETADR:BCS xERR:STA Z1 jsr GETADR:bcs xERR:sta Z1+1 jsr GETADR tay:lda Z1+1:ldx Z1 jsr DEVCMD show jsr mog jmp BR MOgetmem jsr GETMEM jmp show MOfremem jsr GETADR:bcs xERR tax jsr FREMEM jmp show MOgetstr jsr GETSTR jmp show MOfrestr jsr GETADR:bcs xERR tax jsr FRESTR jmp show MOgetenv jsr GETADR:bcs MOCEOx tay jsr GETENV jmp show MOfork #ifdef NOMMU clc ldx #SEM_SENDBUF jsr PSEM #endif jsr GETADR:bcs MOCEOx sta PCBUF+FORK_ADDR stx PCBUF+FORK_ADDR+1 jsr GETADR:bcs MOCEOx sta PCBUF+FORK_SIZE jsr GETADR:bcs MOCEOx sta PCBUF+FORK_SHARED jsr GETADR:bcs MOCEOx sta PCBUF+FORK_STDIN jsr GETADR:bcs MOCEOx sta PCBUF+FORK_STDOUT jsr GETADR:bcs MOCEOx sta PCBUF+FORK_STDERR lda #SP_FORK ldy #6 sec ldx #SEND_SYS jsr SEND #ifdef NOMMU jsr mog ldx #SEM_SENDBUF jsr VSEM jmp BR ;show #else jmp show #endif MOpsem jsr GETADR:bcs MOCEOx tax jsr PSEM jmp show MOvsem jsr GETADR:bcs MOCEOx tax jsr VSEM jmp show MOCEOx jmp ERR .) #endif MOM .( JSR GET12:BCS MOME:jsr setout 30150 MOM1 JSR MOMZO jsr SERBRK:bcs MOME 30160 LDA ABPZ:JSR ADCMP:BCC MOM1 30170 MOME RTS 30180 MOMZO JSR CRLFOUT:LDA #MEBYT:JSR MASOUT 30220 LDY #0:beq mom2:MOM2 jsr SSPOUT:mom2 LDA (Z1),Y 30230 JSR SBYTO:INY:CPY ABPZ:BNE MOM2 lda #":":jsr SEROUT 30240 LDY #0:MOM3 LDA (Z1),Y 30250 TAX:AND #127:CMP #32:BCS MOM4 30260 LDX #".":MOM4 TXA:JSR SEROUT 30270 INY:CPY ABPZ:BNE MOM3 30280 RTS .) BB .( JSR GET12:BCS MOBE:jsr setout MOB1 JSR MOBZO jsr SERBRK:bcs MOBE LDA #1:JSR ADCMP BCC MOB1 MOBE RTS MOBZO JSR CRLFOUT:LDA #MEBYT:JSR MASOUT LDY #0 LDA (Z1),Y JMP SBINBO .) MASOUT PHA LDA #MESSAGE JSR SEROUT PLA JSR SEROUT LDA Z1 LDX Z1+1 JSR SADRO JMP SSPOUT GET12 .( JSR GETADR BCS GBDX STA Z1:STX Z1+1 STA Z2:STX Z2+1 JSR GETADR BCS GBD1 STA Z2:STX Z2+1 GBD1 CLC GBDX RTS .) ;******** R = REGISTER BR .( jsr setout LDA #<R1TXT:LDY #>R1TXT JSR TSERO BR2 lda #MESSAGE jsr SEROUT LDA #MEREG jsr SEROUT LDA BRKPC:LDX BRKPC+1 JSR SADRO JSR SSPOUT LDA BRKAC:JSR SSBOUT LDA BRKXR:JSR SSBOUT LDA BRKYR:JSR SSBOUT LDA BRKSP:JSR SSBOUT JSR SSPOUT LDA BRKSR:JMP SBINBO ;******** GR = GET REGISTER &BGR jsr CHRGOT:cmp #IGNORESIGN:beq gr1a JSR GETADR:bcs bge:STA BRKPC:STX BRKPC+1:jmp gr2:gr1a inc LZEI gr2 jsr CHRGOT:cmp #IGNORESIGN:beq gr2a JSR GETADR:bcs bge:STA BRKAC:jmp gr3:gr2a inc LZEI gr3 jsr CHRGOT:cmp #IGNORESIGN:beq gr3a JSR GETADR:bcs bge:STA BRKXR:jmp gr4:gr3a inc LZEI gr4 jsr CHRGOT:cmp #IGNORESIGN:beq gr4a JSR GETADR:bcs bge:STA BRKYR:jmp gr5:gr4a inc LZEI gr5 jsr CHRGOT:cmp #IGNORESIGN:beq gr5a JSR GETADR:bcs bge:STA BRKSP:jmp gr6:gr5a inc LZEI gr6 jsr CHRGOT:cmp #IGNORESIGN:beq bge JSR GETADR:bcs bge:ORA #$20:STA BRKSR bge jsr CROUT JSR BR2 rts;JMP MESS .) #ifndef SHORTMON ;******** D = DISASSEMBLER BD .( JSR GET12:BCS BDX:jsr setout BD1 JSR SERBRK:bcs BDX JSR ZEID:BCC BD1 BDX rts 12015 &GETPAR LDY #0:LDA (Z1),Y:TAX:AND #$1F:CMP #$10:BNE BDA1 TXA:LSR:LSR:LSR:LSR:LSR:STA NR:INY:LDA (Z1),Y:PHP 12025 LDX Z1+1:CLC:ADC Z1:BCC BDB1:INX:BDB1 CLC:ADC #2:BCC BDB1A:INX 12030 BDB1A PLP:BPL BDB2:DEX 12035 BDB2 STA Z3:STX Z3+1:LDA #2:STA LEN:LDA #6:STA STBYT:RTS 12040 BDA1 TXA:LDX #0:BD1A CMP CODTEX,X:BNE BD1B 12045 TXA:CLC:ADC #8:BD4B STA NR:LDA #1:STA LEN:RTS 12050 BD1B INX:CPX #37-8:BNE BD1A 12055 LDY #33:STY NR 12060 LDX #0:BD2B LDY #0:BD2A CMP CODTAB,X:BEQ BD2OUT 12065 INX:INY:CPY #5:BNE BD2A:INC NR:LDY NR 12070 CPY #45:BNE BD2B 12075 LDX #0:BD3B LDY #0:BD3A CMP CODLON,X:BEQ BD2OUT 12080 INX:INY:CPY #8:BNE BD3A:INC NR:LDY NR 12085 CPY #54:BNE BD3B:BEQ BD4 12090 BD2OUT LDA STB,Y:STA STBYT:TAX:LDY #1:LDA (Z1),Y 12095 STA Z3:TXA:AND #4:BEQ BD3:INY 12100 LDA (Z1),Y:STA Z3+1:BD3 INY:STY LEN:RTS 12105 BD4 LDX #4:BD4A CMP ANDC,X:BEQ BD40:DEX:BPL BD4A:LDA #56:BNE BD4B 12110 BD40 LDA ANDT,X:STA NR:LDA ANDA,X:TAY:BNE BD2OUT 12115 &ZEID JSR CRLFOUT:&ZEID2 LDA #MEASS:JSR MASOUT:JSR GETPAR 12120 LDA NR:ASL:CLC:ADC NR:TAY:LDX #3 12125 ZD1 LDA TEXT,Y:JSR SEROUT:INY:DEX:BNE ZD1 JSR SSPOUT:LDY LEN:DEY:BEQ ZDEND 12130 LDA STBYT:AND #3:TAY:LDA VORSP,Y:BEQ ZD2:JSR SEROUT 12135 ZD2 LDA #"$":JSR SEROUT 12140 LDA Z3:LDX Z3+1:LSR STBYT:LSR STBYT:LSR STBYT:BCS ZD3:JSR SBYTO 12145 JMP ZD4:ZD3 JSR SADRO 12150 ZD4 LDA STBYT:BEQ ZDEND:ASL:CLC:ADC STBYT:TAY:LDX #3 12155 ZD41 LDA NAHSP-3,Y:JSR SEROUT:INY:DEX:BNE ZD41 12160 ZDEND LDY #10:LDA #" ":ZDE1 JSR SEROUT:DEY:BNE ZDE1 12170 LDA LEN:jmp ADCMP .) #endif .( &ADD CLC ADC Z1 STA Z1 LDA #0 ADC Z1+1 STA Z1+1 rts &ADCMP jsr ADD bcs cs &COMP lda Z1+1 CMP Z2+1 bne cs lda Z1 cmp Z2 cs rts .) #ifndef SHORTMON ;******** BGD = ASSEMBLER BA .( JSR GETADR:bcs BGD7 STA Z1:STX Z1+1 jsr CHRGOT:bne BGD2 JMP GETEND &BGD JSR GETADR:STA Z1:STX Z1+1 BGDLOOP JSR CHRGOT BNE BGD2:RTS BGD2 LDX #0:STX NR lda #<TEXT sta ZEI lda #>TEXT sta ZEI+1 BGD3 LDX LZEI:ldy #0 BGD4 LDA IOBUF,x:sec:sbc (ZEI),y:beq bgd5 cmp #$20:bne BGD5 bgd5 INX:INY CPY #3 BCC BGD4:BCS BGD6 BGD5 INC NR:LDA NR:CMP #57:BCS BGD7 lda ZEI:clc:adc #3:sta ZEI bcc BGD3:inc ZEI+1:bne BGD3 BGD7 JMP ERR BGD6 CLC:LDA #3:ADC LZEI:STA LZEI lda NR:cmp #56;"???":beq ASSE JSR GETASC:LDA NR:CMP #8:BCS BGD8 ; BRANCHES LDA STBYT:CMP #2:BNE BGD7:LDA Z3:SEC SBC Z1:TAY:LDA Z3+1:SBC Z1+1:TAX TYA:SEC:SBC #2:TAY:BCS BGDD1:DEX BGDD1 CPX #0:BEQ BGDD2:INX:BNE BGD7 TYA:BPL BGD7:BMI BGDD3:BGDD2 TYA:BMI BGD7 BGDD3 LDY #1:STA (Z1),Y LDA NR:ASL:ASL:ASL:ASL:ASL:ORA #$10 ASSEND LDY #0:STA (Z1),Y:ASSE JSR CROUT JSR ZEID2:JMP GETEND BGD8 CMP #37:BCS BGD9:LDY LEN:DEY:BNE BGD8E:TAX:LDY #0 LDA CODTEX-8,X:JMP ASSEND BGD8E CMP #33:BCS BGD9 BA1E JMP ERR ASKIP jmp ASSE BGD9 LDY LEN:DEY:BEQ BA1E CMP #45:BCS BGDA LDY STBYT:CPY #5:BCS BGNF:SEC:SBC #33 STA NR:ASL:ASL:ADC NR:ADC STBYT:TAX:LDA CODTAB,X ASS1 BEQ BGNF;BA1E:STA NR LDY LEN:DEY:BGD9A LDA Z3-1,Y:STA (Z1),Y DEY:BNE BGD9A:LDA NR:BNE ASSEND BGDA CMP #54:BCS BGNF:LDY STBYT:CPY #8:BCS BGNF:SEC:SBC #45 ASL:ASL:ASL:ADC STBYT:TAX:LDA CODLON,X:JMP ASS1 BGNF LDA NR:CMP #56:BEQ ASKIP ;"???" LDX #4:BGNF1 LDA NR:CMP ANDT,X:BNE BGNF2 LDA STBYT:CMP ANDA,X:BNE BGNF2 LDA ANDC,X:BNE ASS1 BGNF2 DEX:BPL BGNF1 ldx STBYT:lda STBX,x:beq bgnf sta STBYT inc LEN lda #0:sta Z3+1 lda NR:jmp BGD9 bgnf JMP ERR &GETAUF LDY #0:STY STBYT:INY:STY LEN:JSR CHRGOT:BEQ GAU1 LDY #0:CMP #"#":BEQ GA2:INY:CMP #"(":BEQ GA2 INY:bne ga2a GA2 jsr CHRGET ga2a TYA:LSR:ROR STBYT:LSR:ROR STBYT CLC:.BYT $24:GAU1 SEC:RTS GETASC JSR GETAUF:BCC GA3:JMP GA1 GA3 JSR GETADR:STA Z3:STX Z3+1:INC LEN LDA Z3+1:BEQ GA4:SEC:ROR STBYT:INC LEN:BNE GETZU GA4 CLC:ROR STBYT &GETZU LDX #0:JSR CHRGOT:BEQ GA7N0:LDA STBYT AND #96:CMP #32:BNE GA7KL:LDX #3:GA7KL STX INP JSR CHRGOT:JMP GA7XX GA7K1 JSR CHRGET GA7XX BEQ GA7B:CMP #"?":BEQ GA7B CMP #",":BNE GA7K1:INC INP JSR CHRGET CMP #"X":BEQ GA7B cmp #"x":beq GA7B cmp #"y":beq GA7K2 CMP #"Y":BEQ GA7K2 GAERR JMP ERR GA7K2 LDX INP:INX GA7N0 STX INP GA7B LDA STBYT:LSR INP:ROR:LSR INP:ROR:LSR INP:ROR:LSR:LSR:STA STBYT GA1 LDX #9:LDA STBYT cmp #%00011001:bne GAA:lda #$1d:sta STBYT GAA CMP STB,X:BEQ GAA1:DEX:BPL GAA BMI GAERR GAA1 STX STBYT:ASSRT clc:RTS GETEND LDY #0 LDA #MEASS JSR INLOOP BCS ASSRTx JMP BGDLOOP ASSRTx cmp #0 beq ASSRT pla pla jmp linex .) ;******** BU = ADRESSEN UMRECHNEN BU .( JSR GETADR:STA Z1:STX Z1+1:JSR GETADR:STA Z2:STX Z2+1 JSR GETADR:STA Z4:STX Z4+1:jsr GETADR:sta Z5:stx Z5+1 jsr GETADR:sec:sbc Z4:sta Z6:txa:sbc Z4+1:sta Z6+1 BU1 JSR GETPAR:LDA LEN:CMP #3:BNE BU2 LDX Z3+1:LDA Z3 cpx Z4+1:BCC BU2:BNE BU3:CMP Z4:BCC BU2 BU3 CPX Z5+1:BCC BU4:BNE BU2:CMP Z5:BCC BU4:BNE BU2 BU4 LDY #1:CLC:ADC Z6:STA (Z1),Y:INY:TXA:ADC Z6+1:STA (Z1),Y BU2 LDA LEN:JSR ADCMP:BCC BU1:RTS .) #endif MOG .( JSR GETADR:BCS ge STA Z1:STX Z1+1 jsr setout #ifndef NOSH jsr setin #endif lda BRKSR pha lda BRKAC ldx BRKXR ldy BRKYR plp jsr go #ifndef NOSYSFKT &mog #endif php sta BRKAC stx BRKXR sty BRKYR pla sta BRKSR tsx stx BRKSP cli cld ge rts go JMP (Z1) .) ;**** BI .( JSR GETADR:bcs MOIE sta Z1:stx Z1+1 jsr CHRGOT:bne MOI0 lda #MEBYT ldy #0 jmp MOINL &MOI JSR GETADR:STA Z1:STX Z1+1 BCS MOIE jsr CHRGOT beq MOIE MOI0 LDA #0:STA Z2 MOI1 JSR GETADR:LDY Z2:BCS MOINL STA (Z1),Y:INC Z2 JMP MOI1 MOIE RTS MOINL LDA #0 STA Z2 LDA #MEBYT JSR INLOOP BCC MOI1 cmp #0 clc beq MOIE pla pla jmp linex .) INLOOP .( PHA TYA CLC ADC Z1 STA Z1 LDA #0 ADC Z1+1 STA Z1+1 JSR CRLFOUT PLA JSR MASOUT JSR MLINEIN ldy #<-1 il1 iny lda IOBUF,y beq ils cmp #MESSAGE ; zeile gewechselt beq ils cmp #" " beq il1 sty LZEI clc rts ils /*#ifdef SHOW lda #"c" ldx #STDERR jsr OUT #endif*/ sec rts .) ;**** #ifdef NOSYSFKT MOE MOS jmp ERR #else MOE .( jsr GETADR bcs MOER sta Z2 jsr GETADR sta Z2+1 bcs MOER set ldx #OWNTASK ldy Z2 sec jsr SETBLK bcs MOER jsr CHRGOT cmp #"+" beq some inc Z2 jsr GETADR sta Z2+1 bcc set clc rts some jsr CHRGET jsr GETADR sta Z3 next inc Z2 inc Z2+1 ldx #OWNTASK ldy Z2 lda Z2+1 sec jsr SETBLK bcs MOER dec Z3 bne next clc rts MOER lda #"E":jsr SEROUT jmp ERR .) MOS .( jsr wopenfile bcs MOSE stx Z0 jsr GETADR bcs mose sta Z2:stx Z2+1 jsr GETADR bcs mose sta Z1:stx Z1+1 ldy #0 mos1 lda Z2+1 cmp Z1+1 bcc mos1a bne mosec lda Z2 cmp Z1 bcs mosec mos1a lda (Z2),y ldx Z0 jsr OUT inc Z2 bne mos1 inc Z2+1 jmp mos1 mosec clc mose php ldx Z0 lda #SC_EOF jsr STRCMD plp MOSE bcc msx jsr ERR msx rts .) #endif &MOL .( JSR CHRGOT CMP #34 BNE mol #ifdef NOSYSFKT jmp ERR #else jsr ropenfile bcs MOLEx stx Z0 jsr GETADR bcs mole sta Z2:stx Z2+1 ldy #0 moll ldx Z0 jsr IN bcs molec sta (Z2),y inc Z2 bne moll inc Z2+1 bne moll molec clc mole php lda #":" jsr SEROUT lda Z2 ldx Z2+1 jsr SADRO ldx Z0 lda #SC_NUL jsr STRCMD plp MOLEx bcc mlx jsr ERR mlx rts #endif mol JSR GETADR:BCS MOLE 30410 STA Z1:STX Z1+1 30420 JSR GETADR:BCS MOLE 30430 STA Z2:STX Z2+1:ora Z2+1:beq MOLE 30440 MOLL JSR SERIN:LDY #0:STA (Z1),Y 30450 INC Z1:BNE MOL1:INC Z1+1 30460 MOL1 LDA Z2:BNE MOL2 30470 DEC Z2+1:MOL2 DEC Z2:BNE MOLL 30480 LDA Z2+1:BNE MOLL 30490 MOLE RTS .) 30499 ;**** .( &MOC3 JSR GETADR:BCS MOCX STA Z1:STX Z1+1 JSR GETADR:BCS MOCX STA Z2:STX Z2+1 JSR GETADR:BCS MOCX STA Z3:STX Z3+1:RTS &MOC JSR MOC3:BCS MOCE:jsr setout:JSR CRLFOUT 30570 MOC2 LDY #0:LDA (Z1),Y:CMP (Z3),Y 30580 BEQ MOC1:LDA Z1:LDX Z1+1 30590 JSR SADRO:JSR SSPOUT 30600 MOC1 LDA #1:JSR ADCMP:BCS MOCX 30610 INC Z3:BNE MOC2:INC Z3+1 30620 JMP MOC2 30630 MOCX RTS 30640 MOCE jmp ERR .) MOF .( ldy LZEI:lda IOBUF,y:pha:beq mofex cmp #" ":beq mof00:inc LZEI mof00 jsr GETADR:sta Z1:stx Z1+1:bcs mofex jsr GETADR:sta Z2:stx Z2+1:bcs mofex pla:cmp #" ":bne mofother lda #0:sta Z3 mof0 jsr GETADR:bcs mofn ldx Z3:sta IOBUF,x:inc Z3 bne mof0 mofn ldy LZEI:lda IOBUF,y cmp #34:bne mofnx ldx Z3 mofn1 iny lda IOBUF,y beq mofn2 cmp #34 beq mofn2a sta IOBUF,x inx bne mofn1 mofn2a iny mofn2 sty LZEI stx Z3 bne mof0 mofnx lda Z3:beq mofe jsr CRLFOUT mof1 ldy #0 mofl lda (Z1),y cmp IOBUF,y bne mof2 iny cpy Z3:bcc mofl lda Z1:ldx Z1+1:jsr SADRO jsr SSPOUT mof2 lda #1:jsr ADCMP:bcc mof1 rts mofex pla mofe jmp ERR #ifdef SHORTMON mofother =*-3 #else mofother cmp #"R":beq mofr cmp #"r":bne mofrn mofr 18060 LDA #6:STA IOBUF+2:LDA #2:STA IOBUF+1:LDA #%11111111:STA IOBUF 18065 BNE BFA1 mofrn cmp #"-":beq mofneg:JSR CHRGET:JSR GETAUF:BCS BFA0 18075 LDA #0:STA IOBUF:STA IOBUF+2:JSR CHRGOT:Beq BFA0 JSR GADR:bcs mofe:JSR GETZU:bcs BFA3 18080 STA IOBUF+2 18085 BFA0 LDA LEN:STA IOBUF+1 18090 BFA1 JSR GETPAR:LDA LEN:PHA:CMP IOBUF+1:BNE BFA1N:DEC LEN:BEQ BFA1OK 18095 LDA STBYT:CMP IOBUF+2:BNE BFA1N 18100 JSR CADR:BNE BFA1N 18105 BFA1OK JSR CROUT:PLA:JSR ZEID:JMP BFA2 18110 BFA1N PLA:JSR ADD:BCS BFA3:BFA2 JSR SERBRK:Bcs BFA3 18115 JSR COMP:BCC BFA1:BEQ BFA1:BFA3 RTS mofneg jsr GETADR:sta Z3 jsr CRLFOUT mofn3 ldy #0:lda (Z1),y cmp Z3 beq mofn4 lda Z1:ldx Z1+1:jsr SADRO jsr SSPOUT mofn4 lda #1:jsr ADCMP:bcc mofn3 rts CADR LDY IOBUF:LDX #0:JSR CBYT:BNE CART:INX:DEC LEN:BEQ CART 1490 CBYT LDA IOBUF+3,X:EOR Z3,X 1495 STA INP:TYA:LSR:TAY:BCS CNI1:LDA INP:AND #$0F:BNE CART 1500 CNI1 TYA:LSR:TAY:BCS CA1:LDA INP:AND #$F0:CART RTS:CA1 LDA #0:RTS GADR ldy LZEI:INC LEN:CLC:ROR STBYT 1460 JSR GBYT:bcs GARx:STA IOBUF+4 lda IOBUF,y:Beq CART2 CMP #",":BEQ CART2 CMP #")":beq CART2 1465 CMP #"?":BEQ CART2 INC LEN:LDA STBYT:ORA #$80:STA STBYT jsr GBYT:.byt $24:CART2 clc:.byt $24:GARx sec:sty LZEI:rts 1470 GBYT JSR GNIB:bcs GAR:ASL:ASL:ASL:ASL:STA INP:JSR GNIB:bcs GAR ORA INP:STA IOBUF+3:clc:RTS 1475 GNIB lda IOBUF,y:beq GAR:iny CMP #"*":BNE GNI1:LDA #0:SEC:BCS GNI2 1480 GNI1 JSR tsthex:bcs GAR:CLC:GNI2 ROL IOBUF:clc:RTS 1140 JSR CHRGET:PHP:dec LZEI 1145 PLP:BEQ GAR:CLC:RTS:GAR SEC:RTS #endif .) MOT .( JSR MOC3:BCS MOCEO 30710 LDA Z3+1:CMP Z2+1:BCC MOT1 30720 BNE MOTA:LDA Z3:CMP Z2:BCS MOTA 30730 MOT1 LDA Z3+1:CMP Z1+1 30740 BCC MOTA:BNE MOTB 30750 LDA Z3:CMP Z1:BCS MOTB 30760 MOTA LDY #0:LDA (Z1),Y 30770 STA (Z3),Y:INC Z3:BNE MOT2 30780 INC Z3+1:MOT2 LDA #1:JSR ADCMP 30790 BNE MOTA:RTS 30800 MOTB LDA Z3:CLC:ADC Z2:STA Z3 30810 LDA Z3+1:ADC Z2+1:STA Z3+1 30820 LDA Z3:SEC:SBC Z1:STA Z3 30830 LDA Z3+1:SBC Z1+1:STA Z3+1:jmp MOT3a 30840 MOT3 LDY #0:LDA (Z2),Y:STA (Z3),Y 30850 MOT3a LDA Z2:BNE MOT4:DEC Z2+1 30860 MOT4 DEC Z2 30870 LDA Z3:BNE MOT5:DEC Z3+1 30880 MOT5 DEC Z3 30890 JSR COMP 30895 BCC MOT3:BEQ MOT3:RTS .) 30899 ;**** MOCEO jmp ERR MOO .( JSR GETADR:BCS MOCEO 30906 STA Z1:STX Z1+1 30907 JSR GETADR:BCS MOCEO 30908 STA Z2:STX Z2+1 30910 JSR GETADR:BCC MOO1 30920 LDA #0:MOO1 STA Z3 30930 MOO2 LDY #0:LDA Z3:STA (Z1),Y 30940 LDA #1:JSR ADCMP:BCC MOO2 30950 RTS .) 30999 ;**** MOP .( #ifndef NOSYSFKT jsr CHRGOT beq MOP1 cmp #IGNORESIGN beq mop1 jsr GETADR:bcs MOP1 jsr SETDRV jmp mop2 mop1 inc LZEI mop2 #endif jsr CHRGOT beq MOP1 cmp #IGNORESIGN beq mop3 JSR GETADR:BCS MOP1 STA ABPZ jmp mop4 mop3 inc LZEI mop4 jsr GETADR:bcs MOP1 jsr Setmem MOP1 rts .) 38999 ;******** SSBOUT JSR SBYTO JMP SSPOUT SADRO PHA:TXA:JSR SBYTO:PLA SBYTO PHA:LSR:LSR:LSR:LSR JSR SNIBO:PLA:AND #$0F SNIBO CLC:ADC #"0":CMP #"9"+1 BCC SNO1:ADC #6:SNO1 JMP SEROUT SBINBO STX Z3 pha LDA #"%" JSR SEROUT pla LDX #8 s2 ASL PHA BCC s1 lda #"1" .byt $2c s1 lda #"0" jsr SEROUT pla dex bne s2 ldx Z3 rts M0TXT .ASC "^M^JC*^M^J" .ASC "MON V" .BYT MA+"0",".",MB+"0" .asc " (c) A.Fachat^@" M3TXT .BYT " ","?",0 R1TXT .ASC "^M^J PC AC XR YR SP NV1BDIZC^M^J^@" MONBEF .ASC "ESMGLCTOPUIFXDBRA" .BYT MEBYT,MEREG,MEASS #ifndef NOSYSFKT .byt "Y" ANZBEF =21 #else ANZBEF =20 #endif MONADR .WORD MOE-1,MOS-1,MOM-1,MOG-1 .WORD MOL-1,MOC-1,MOT-1,MOO-1 .WORD MOP-1,BU-1,BI-1,MOF-1 .WORD MOX-1,BD-1,BB-1,BR-1,BA-1 .word MOI-1,BGR-1,BGD-1 #ifndef NOSYSFKT .word MOY-1 #endif 59999 ;******** #ifndef SHORTMON 61000 TEXT .ASC "BPLBMIBVCBVSBCCBCSBNEBEQ";0-7 61005 .ASC "BRKCLCCLDCLICLVDEXDEYINXINY";8-16 61010 .ASC "NOPPHAPHPPLAPLPRTIRTSSECSEDSEI";17-26 61015 .ASC "TAXTAYTSXTXATXSTYA";27-32 61020 .ASC "ASLLSRROLRORBITCPXCPYDECINC";33-41 61025 .ASC "LDYSTXSTYADCANDCMPEORLDALDXORASBCSTAJSRJMP???";42-56 61030 CODTEX .BYT $00,$18,$D8,$58 61035 .BYT $B8,$CA,$88,$E8,$C8,$EA 61040 .BYT $48,$08,$68,$28,$40,$60 61045 .BYT $38,$F8,$78,$AA,$A8,$BA 61050 .BYT $8A,$9A,$98,$0A,$4A,$2A,$6A 61055 CODTAB =* 61060 .BYT $00,$06,$0E,$16,$1E 61065 .BYT $00,$46,$4E,$56,$5E 61070 .BYT $00,$26,$2E,$36,$3E 61075 .BYT $00,$66,$6E,$76,$7E 61080 .BYT $00,$24,$2C,$00,$00 61085 .BYT $E0,$E4,$EC,$00,$00 61090 .BYT $C0,$C4,$CC,$00,$00 61095 .BYT $00,$C6,$CE,$D6,$DE 61100 .BYT $00,$E6,$EE,$F6,$FE 61105 .BYT $A0,$A4,$AC,$B4,$BC 61110 .BYT $00,$86,$8E,$00,$00 61115 .BYT $00,$84,$8C,$94,$00 61120 CODLON =* 61125 .BYT $69,$65,$6D,$75,$7D,$79,$61,$71 61130 .BYT $29,$25,$2D,$35,$3D,$39,$21,$31 61135 .BYT $C9,$C5,$CD,$D5,$DD,$D9,$C1,$D1 61140 .BYT $49,$45,$4D,$55,$5D,$59,$41,$51 61145 .BYT $A9,$A5,$AD,$B5,$BD,$B9,$A1,$B1 61150 .BYT $A2,$A6,$AE,$00,$00,$BE,$00,$00 61155 .BYT $09,$05,$0D,$15,$1D,$19,$01,$11 61160 .BYT $E9,$E5,$ED,$F5,$FD,$F9,$E1,$F1 61165 .BYT $00,$85,$8D,$95,$9D,$99,$81,$91 61170 STB .BYT $00,$02,$06,$0A,$0E,$16,$21,$29,$1D,$12 61175 ANDC .BYT $96,$B6,$20,$4C,$6C 61180 ANDT .BYT 43,50,54,55,55 61185 ANDA .BYT 9,9,2,2,8 STBX .BYT 0,2,0,4,0,0,0,0,0,5 61500 ;**** 61505 VORSP .ASC "#(":.BYT 0 61510 NAHSP .ASC ",X ,Y ) ,X)),Y" #endif .)