Name : EDITOR3.S End of file : 34,353 This file was generated using the DiskBrowser utility with minimal editing. It is meant for viewing purposes only. ORG $9900 ; ; Parse cmd line for dec string ; Convert to a 16-bit unsigned val ; Stops process on a non-dec char ; ; Output ; C=0 - Conversion was done and ; (Reg11)=16-bit value ; C=1 - No conversion ; L9900 LDA #0 STA Reg11 STA Reg11+1 LDA Z12 ;Get char JSR L996D ;Convert if dec digit BCS L9958 ;Not dec STA Reg11 STA L996C L9912 JSR XB274 ;Get next non-blank char JSR L996D BCS L9957 ;Not a dec digit ; STA Reg4 ;(A)=0-9 ORA L996C STA L996C LDA Reg11 STA Reg0 CMP #$98 ;Max val < 65520 LDA Reg11+1 STA Reg0+1 SBC #$19 BCS L99A5 ;Overflow ; ROL Reg0 ;x4 ROL Reg0+1 ROL Reg0 ROL Reg0+1 ; LDA Reg0 ;x5 CLC ADC Reg11 STA Reg11 LDA Reg0+1 ADC Reg11+1 STA Reg11+1 ROL Reg11 ;x2 ROL Reg11+1 equi to mulby10 ; CLC ;Add incoming digit LDA Reg4 ADC Reg11 STA Reg11 BCC L9954 INC Reg11+1 L9954 JMP L9912 ;Next digit ; L9957 CLC L9958 RTS ;================================================= L9959 JSR L9900 ;Convert dec string BCS L9964 LDA L996C ;Was a string of 0's entered? BEQ L9965 ;Yes CLC L9964 RTS ; L9965 LDX #$58 ;Bad Line #/Range PLA PLA JMP XB290 ;err msg ; L996C DB $C0 ;Flag ;================================================= ; Input ; (A) char ; Output ; C=0 if decimal char and (A)= 0-9 ; C=1 not a decimal char ; L996D CMP #'9'+1 ;Is char '0'-'9'? BCS L9979 CMP #'0' BCC L9979 ;No AND #$0F ; --> 0-9 CLC RTS L9979 SEC RTS ;================================================= ; Save (Reg11) into $BD00/$BD80 buf ; L997B LDA Reg11 JSR L9982 LDA Reg11+1 L9982 EQU * LDY #0 STA (Reg12),Y INC Reg12 BNE L998C INC Reg12+1 L998C RTS ;================================================= ; If there is no dec/hexdec str issued with cmd ; then ($BD00-$01)=$0000 ; L998D JSR L9959 ;Convert & L9990 JSR L997B ; store DEX JMP XB211 ; L9997 JSR L9900 ;Convert dec string JMP L99A0 ;Chk if parm is mandatory ; L999D JSR L9959 ;Get mandatory dec # L99A0 BCC L9990 ;Yes, proceed to store it ; L99A2 LDX #$1C ;Parms omitted DB $2C L99A5 LDX #$0B L99A7 JMP XB290 ;================================================= L99AA JSR L99CD ;(Reg12)=ptr to $BD80 buf ; L99AD JSR L9A18 ;Copy parm as it JMP XB211 ;================================================= L99B3 JSR L9A18 ;Copy 1st reqd parm BCC L99A2 ;Err if not parm's not passed JSR L9A1E ;Copy 2nd optional parm JMP XB211 ;================================================= L99BE LDA #CR ;Set CR to be STA Z12 ; the end DEX LDY #33 STY Z10 JSR L9A22 ;Copy parm as is JMP XB211 ;================================================= ; Output ; (Reg12) - ptr to $BD80 ; L99CD LDA #>XBD80 ;SET R12,$BD80 STA Reg12 LDA #err LDY #-1 ;Flag an interval BMI L9A4B ;always ; L9A70 LDA #-1 ;Store a couple of $FF JSR L9982 ; to mark end of interval JSR L9982 DEX JSR L99CD JMP XB211 ;Continue parsing cmd line ;================================================= ; (Z12)-char ; Output ; (Z12) (A) ; , $FF ; - $00 ; CR $E0 ; L9A7F JSR L997B ;Save Reg11 to buffer LDA Z12 ;Get char SEC SBC #'-' JMP L9982 ;================================================= ; Parse for L$/A$ parms ; L9A8A LDA #'L' BNE L9A93 ;always L9A8E JSR L9AA5 LDA #'A' L9A93 CMP Z12 BNE L9A9F JSR XB274 JSR L9AC4 BCC L9AA2 L9A9F JMP L99A2 L9AA2 JMP L9990 ;================================================= ; Set ptr to buf for storing A$ and L$ 16-bit ; values which are separated by a 0 ; L9AA5 EQU * ;ENTRY LDA #>XBD00 STA Reg12 ;SET R12,XBD00 LDA # $3A-$3F AND #$0F ; -> $0A-$0F L9B15 CLC L9B16 RTS ; L9B17 SEC L9B18 RTS ;================================================= ; XLOAD cmd ; This cmd is only valid if edit is not split ; L9B19 RTN JSR L9C4F ;Chk if swap is in effect JSR NEWSW16 ;No L9B20 SET R4,XBD80 ;Point @ PN SET R0,$0006 ADD R5 ;TxtBgn ST R3 ST R9 ;=TxtBgn+6 ($807) L9B29 LDD R12 ;Is a Load addr specified? BZ L9B36 ;No CPR R9 ;Addr must not be < this BNC L9B32 CPR R6 ;Is it < HiMem? BNC L9B35 ;Yes L9B32 BRL LD541 ;Invalid parm err ; L9B35 ST R9 ;=Specified LoadAdr L9B36 LD R5 ;Ptr to TxtBgn ($801) ST R2 SUB R0 ;Zero ACC and STD R2 ; locations $801-$802 RTN LDA #BINtype JSR XB883 BCC L9B45 JMP XB602 ; L9B45 LDY #5 L9B47 LDA XBAC8,Y ;Copy Access bits, filetype STA (Reg5),Y ; & auxtype to $803-$806 DEY CPY #1 BNE L9B47 ; LDX XBACB ;Is file of type TXT? CPX #TXTtype BEQ L9B60 ;Yes CPX #$02 BCC L9B60 CPX #$0F ;DIRtype BNE L9B65 L9B60 LDA #$11 ;File type mismatch JMP XB602 ; L9B65 JSR NEWSW16 LD R3 ST R7 ;TxtEnd RTN JMP LD9C6 ;(X)=filetype -> go loadfile ;================================================= ; XSAVE cmd ; An XLOAD must precede an XSAVE; this cmd will not ; be executed if this rule is not obeyed. Internal ; control info will be properly setup by the ; XLOAD cmd. ; If no addr is specified, (Reg9) may not be ; computed correctly unless an XLOAD cmd is ; immediately followed by an XSAVE cmd. For ; this case, Reg5 and Reg7 must be set correctly ; For this multiple cmd (w/o A$, L$ parms) ; XLOAD : XSAVE ; to work correctly, Reg9 and Reg10 must ; be setup properly ; Reg12 - ptr to $BD00 buf ; L9B6E SET R0,$0006 ADD R5 ;TxtBgn CPR R7 ;TxtEnd BNZ L9B78 BRL LD6EC ;Just do a FILE cmd ; L9B78 SET R4,XBD80 ;Ptr to PN ST R10 ;=TxtBgn+6 LDD R12 ;Did user specify an addr? BZ L9B89 ;No ST R10 LDD R12 ;Did user specify a len? BNZ L9B86 ;Yes BRL LD541 ;Invalid parm ; L9B86 ST R9 BR L9B8F L9B89 LD R7 ;XLOAD should have set this ST R9 ; correctly to last byte of INR R9 ; file's data in mem LD R9 ;Compute # of bytes SUB R10 ST R9 ; to write L9B8F RTN ; JSR L9C4F ;Must not have a split buf LDY #0 LDA (Reg5),Y ;Chk for a double zero INY ORA (Reg5),Y BEQ L9BA1 ;Got 'em L9B9C LDA #$11 JMP XB602 ; L9BA1 LDY #3 LDA (Reg5),Y ;filetype JSR LDA65 ;Write the file LDA FileType L9BAA JSR XB883 LDY #3 L9BAF LDA XBAD1,Y ;Date/Time STA XBAE3,Y ; last mod DEY BPL L9BAF ; LDY #2 L9BBA LDA (Reg5),Y ;Copy access,filetype STA XBADA,Y ;and auxtype @ $803-$806 INY CPY #6 BCC L9BBA ; LDA XBAC8 ;PN ptr STA XBADA LDA XBAC8+1 STA XBADA+1 JSR XB904 ;Set file's attrib JMP XB1CB ;================================================= ; BLOAD cmd ; L9BD6 RTN JSR L9C4F JSR NEWSW16 SET R4,XBD80 ;Ptr to PN LDD R12 ;Get load addr CPR R5 ;Is it >= TxtBgn? BC L9BE7 ;Yes L9BE4 BRL LD541 ; L9BE7 CPR R6 ;Is it >= HiMem? BC L9BE4 ;Yes, err ST R9 RTN LDX #BINtype JSR LoadFile L9BF1 BCC L9BF6 JMP XB602 L9BF6 JMP XB1CB ;================================================= ; BSAVE cmd ; L9BF9 SET R4,XBD80 ;Ptr to PN LDD R12 ST R10 ;adr LDD R12 ST R9 ;len RTN LDA #BINtype JSR LDA65 ;Save the file LDA #BINtype STA XBADD JSR XB883 ;Get info on freshly-created file ; LDY #3 L9C10 LDA XBAD1,Y ;Date&Time of STA XBAE3,Y ; last modification DEY BPL L9C10 ; LDA XBA92 ;Ptr to data buf STA XBADE LDA XBA92+1 STA XBADE+1 LDA #$C3 ;Access bits STA XBADC LDA XBAC8 ;Ptr to PN STA XBADA LDA XBAC8+1 STA XBADA+1 JSR XB904 ;Set file's attributes JMP XB1CB ;================================================= L9C3C LDA LA5B4,Y ;Get char INY JMP XB343 ; and print it ;================================================= ; PrByte ; L9C43 JSR XB99B ;Convert (A) into 2-char str PHA TXA JSR XB343 PLA JMP XB343 ;================================================= L9C4F LDA SwapMode ;Is txt buf split? BEQ L9C56 ;No JMP XB6EA ;Show err & don't ret to caller L9C56 RTS ;================================================= ; Move contents of txtbuf down in mem ; L9C57 JSR NEWSW16 SET R1,Z7E LD R9 STD R1 ;src addr LD R7 ;TxtEnd STD R1 ;=$80 LD R10 STD R1 ;=$82 (dest addr) ADD R7 ;Compute the final addr SUB R9 ; of last char of txtbuf RTN ; LDY #0 L9C68 LDA (Z7E),Y STA (Z82),Y INC Z82 BNE L9C72 INC Z82+1 L9C72 LDA Z7E CMP Z80 LDA Z7E+1 SBC Z80+1 ; INC Z7E BNE L9C80 INC Z7E+1 L9C80 BCC L9C68 ; L9C82 JSR NEWSW16 ;Is new TxtEnd CPR R5 ; >= new TxtBgn? BC L9C89 ;Yes LD R5 L9C89 ST R7 ;TxtEnd RTN RTS ;================================================= ; Print error msg table ; (X)-index into err msg table ; L9C8C LDA L9CA0,X BEQ L9C97 JSR XB343 INX BNE L9C8C L9C97 RTS ;================================================= ; Editor's error message printer ; L9C98 EQU * ;ENTRY JSR L9C8C LDX #$68 ;ERROR JMP L9C8C ;================================================= ; L9CA0 ASC 'CMD SYNTAX' DB $00 ASC 'NUMERIC OVERFLOW' DB $00 ASC 'PARAMETER(S) OMITTED' DB $00 ASC 'UNKNOWN COMMAND' DB $00 ASC 'MULTI BUFFER' DB $00 ASC 'EXEC NEST' DB $00 ASC 'BAD LINE#/RANGE' DB $00 ASC ' ERROR' DB $07,CR,$00 ;================================================= ; Editor's Default Tab table ; L9D11 EQU * ;ENTRY DB 32,36,48 L9D14 EQU * ;ENTRY ASC 'EDASM.AUTOST' DB $00 ;================================================= ; $9D21 ; This 'JMP via RTS' table is utilised by the EI's ; code ($B20F-$B262) for further processing of ; the command line stored at InBuf ; JMPTBL EQU * ;ENTRY DW XB659-1 ;0 - Chk for a CR DW L999D-1 ;2 DW L9A3F-1 ;4 DW L99AD-1 ;6 DW L99B3-1 ;8 DW L99D6-1 ;A DW L9A04-1 ;C DW L99BE-1 ;E DW L998D-1 ;10 DW L99F5-1 ;12 DW L998D-1 ;14 DW L9997-1 ;16 DW L99AA-1 ;18 DW L99D6-1 ;1A DW L9A0C-1 ;1C DW L9AB2-1 ;1E DW L9AAE-1 ;20 DW L9A8E-1 ;22 DW L9A8A-1 ;24 DW L9AB2-1 ;26 ; ; Ptr to the various messages. This table must ; be arranged in 1:1 corr with the table above ; L9D49 DW XB289 ;0 DW L9D7D ;2 DW L9D8F ;4 DW L9DA2 ;6 DW L9DAD ;8 DW L9DBD ;A DW L9DC7 ;C DW L9DD6 ;E DW L9D85 ;10 DW L9D71 ;12 DW L9DDF ;14 DW L9DE3 ;16 DW L9DA2 ;18 DW L9DE7 ;1A DW L9DF4 ;1C DW L9E0C ;1E DW L9E16 ;20 DW L9E20 ;22 DW L9E29 ;24 DW L9E01 ;26 ;================================================= ; ERROR FRAGMENTS ; L9D71 ASC ' ' DB $00 L9D7D ASC ' LINE# ' DB $00 L9D85 ASC ' ' DB $00 L9D8F ASC ' > ' DB $00 L9DA2 ASC ' .STRING. ' DB $00 L9DAD ASC '.OLDSTR.NEWSTR.' DB $00 L9DBD ASC ' PATHNAME' DB $00 L9DC7 ASC '' DB $00 L9DD6 ASC '' DB $00 L9DDF ASC '<#>' DB $00 L9DE3 ASC ' # ' DB $00 L9DE7 ASC ' OLDPATHNAME' DB $00 L9DF4 ASC ' NEWPATHNAME' DB $00 L9E01 ASC '[A<$>ADRS]' DB $00 L9E0C ASC '[A<$>ADRS' DB $00 L9E16 ASC 'L<$>LGTH]' DB $00 L9E20 ASC 'A<$>ADRS' DB $00 L9E29 ASC 'L<$>LGTH' DB $00 ;================================================= ; Convert (A) into BCD and return ; 2-byte dec string in (X,A) ; L9E32 TAX CPX #100 BCC L9E3B LDA #'*' TAX RTS ; L9E3B LDA #0 SED L9E3E CLC ADC #1 DEX BNE L9E3E ; CLD PHA AND #$F0 ;Isolate ten's digit LSR LSR LSR LSR ORA #'0' ;-> ASCII TAX PLA AND #$0F ;Isolate unit's digit ORA #'0' RTS ;================================================= ; Convert ProDOS Date/Time into ASCII format ; L9E55 EQU * ;ENTRY LDA #'-' STA DateTime+2 STA DateTime+6 LDA #':' STA DateTime+13 LDA #SPACE STA DateTime+10 STA DateTime+9 LDA P8TIME ORA P8TIME+1 BNE L9E7E ; LDX #5 ;No Time LDA #SPACE L9E76 STA DateTime+10,X DEX BNE L9E76 BEQ L9E9A ;always ; L9E7E LDA P8TIME AND #%00111111 ;xxMM MMMM JSR L9E32 STX DateTime+14 STA DateTime+15 LDA P8TIME+1 AND #%00011111 ;xxxH HHHH JSR L9E32 STX DateTime+11 STA DateTime+12 ; L9E9A LDA P8DATE+1 ;YYYY YYYM LSR ;0YYY YYYY PHP ;Save M-bit in C JSR L9E32 STX DateTime+7 STA DateTime+8 LDA P8DATE ;MMMD DDDD PHA AND #%00011111 ;000D DDDD JSR L9E32 STX DateTime STA DateTime+1 PLA AND #%11100000 ;MMM0 0000 PLP ;M-bit ROR ;MMMM 0000 LSR ;Index in Months table LSR LSR ;000M MMM0 (div8) STA DateTime+3 ;Use as tmp LSR ;0000 MMMM (div16) CLC ADC DateTime+3 TAX DEX LDY #3 L9ECB LDA MonthsT,X STA DateTime+2,Y ;Month in ASCII DEX DEY BNE L9ECB RTS ;================================================= L9ED6 ASC 'BYTES USED' DB CR L9EE1 ASC 'BYTES REMAINING' DB CR L9EF1 ASC 'BYTES USED BY NON TEXT DATA' DB CR L9F0D ASC ' = XSAVE FILE TYPE' DB CR L9F21 ASC ' = XSAVE AUX TYPE' DB CR ;================================================= L9F34 JSR PRODOS8 ;Newline DB $C9 DW XBAA0 RTS ; L9F3B JSR PRODOS8 DB $CA DW L9F42 RTS ; ; Read text file parm block ; Used by the TYPE cmd ; L9F42 DB $04 L9F43 DB $A0 ;Ref # DW XBD00 ;read data buf L9F46 DW 255 ;max val L9F48 DW $A0A0 ;================================================= ; CREATE cmd ; L9F4A SET R4,XBD80 ;Ptr to PN RTN LDA #$0F ;DIRtype JSR XB883 ;Does file exist? BCS L9F5A ;No LDA #$47 ;Err L9F57 JMP XB602 ; L9F5A LDA FileType STA XBAEB LDA #$0D ;sub-DIR STA XBAEE LDA #$C3 ;Access bits STA XBAEA LDA XBAC8 ;Re-use STA XBAE8 LDA XBAC8+1 ; ptr to PN STA XBAE8+1 JSR XB919 ;Create subdir LDX #$01 STX XBAEE ;Reset this TAX BNE L9F57 ;Err JMP XB1CB ;================================================= CPYRIGHTS EQU * ;ENTRY DB CR,CR,CR,CR,CR,CR,CR ASC ' PRODOS EDITOR-ASSEMBLER // ' DB CR,CR ASC ' RELEASE 1.1 ' MSB ON ASC "01-MAY-85" MSB OFF DB CR,CR ASC ' BY JOHN ARKLEY' DB CR,CR,CR ASC ' ' MSB ON ASC "COPYRIGHT (C) 1983-85" MSB OFF DB CR,CR ASC ' ' MSB ON ASC " APPLE COMPUTER INC." MSB OFF DB CR ;================================================= ; PTRON cmd ; LA024 RTN LDA DevCtlS ;Slot # (0000 0sss) ASL ASL ASL ASL AND #$70 ;0sss 0000 BEQ LA042 ;Slot 0 ; STA LA1A0 ;Unit # JSR PRODOS8 DB $C5 DW LA19F BEQ LA03F ;Printers should not ret 0 CMP #$28 ;No device connected? BEQ LA042 ;Yes LA03F JMP LD53E ;Invalid parm ; LA042 LDA #$80 LA044 STA PtrMode ;PTRON flag JMP XB1CB ;================================================= ; PTROFF cmd ; LA049 RTN LDA #$00 BEQ LA044 ;always ;================================================= ; Print name of file in active txtbuf ; LA04E LDA SwapMode CMP #$02 BNE LA054 ;Useless instr LA054 LDA XBE00 BEQ LA066 ; LDY #0 LA05B LDA XBE00,Y BEQ LA066 JSR XB343 ;Output char INY BPL LA05B ; LA066 JMP XB339 ;Do a cr ;================================================= LA069 JSR NEWSW16 LA06C SET R9,XB50D ;Dir not found BRL LD33F ;================================================= ; CATALOG cmd ; LA072 SET R0,80 ;# of cols BR LA07A ; ; CAT ; LA077 SET R0,40 ; LA07A SET R4,LA5B3 STI R4 SET R4,XBD80 ;Point @ PN LDI R4 ;Did user include PN? BNZ LA090 ;Yes SET R4,XBB80 ;No, try curr pfx LDI R4 ;Get len byte BZ LA06C ;No prefix set ADD R4 ;Compute EO pfx ST R1 SUB R0 ;Zero ACC STI R1 ;Append a 0 to pfx BR LA091 ; LA090 DCR R4 LA091 RTN ; ; Reg4-ptr to PN ; LA092 LDA #$0F ;DIRtype JSR XB883 ;Chk file's info BCS LA0C6 ;Not found JSR XB339 ;Do a cr LA09C LDA XBACE ;Storage type CMP #$0D ;Linked dir file? BEQ LA0AC ;Yes CMP #$0F ;Vol Dir? BNE LA069 ;No LDA #'/' JSR XB343 ; LA0AC LDX #>XA900 ;1024-byte I/O buf LDY #LA8D1 STA Reg4 LDA #' ; LA5AC DB $A0,$A0,$B0,$C0 LA5B0 DB $C5 ;month LA5B1 DB $A0 ;day LA5B2 DB $A0 ;year LA5B3 DB 40 ;# of cols ; ; ASCII representation of filetypes ; LA5B4 ASC 'UNK' ;$00 ASC 'BAD' ;$01 ASC 'PCD' ;$02 ASC 'PTX' ;$03 ASC 'TXT' ;$04 ASC 'PDA' ;$05 ASC 'BIN' ;$06 ASC 'FNT' ;$07 ASC 'GRF' ;$08 ASC 'BA3' ;$09 ASC 'DA3' ;$0A ASC 'WPF' ;$0B ASC 'SOS' ;$0C ASC '$0D' ;$0D ASC '$0E' ;$0E ASC 'DIR' ;$0F ASC '$U0' ;$F0-CMD ASC '$U1' ;$F1 ASC '$U2' ;$F2 ASC '$U3' ;$F3 ASC '$U4' ;$F4 ASC '$U5' ;$F5 ASC '$U6' ;$F6 ASC '$U7' ;$F7 ASC '$U8' ;$F8 ASC '$U9' ;$F9-OS ASC 'INT' ;$FA ASC 'IVR' ;$FB ASC 'BAS' ;$FC ASC 'VAR' ;$FD ASC 'REL' ;$FE ASC 'SYS' ;$FF ;================================================= LA614 LDY CH LDA (BASL),Y BIT RDROM2 JSR LA653 ;Get key via I/O hooks AND #$7F BIT RDBANK2 RTS ;================================================= ; Editor's KSW entry point ; Input ; (A)=char under cursor ; LA624 PHA PHA LDA (BASL),Y ;Get char fr screen location CMP #UNDERSCORE+$80 BEQ LA631 ;Yes PLA ;char LDA #UNDERSCORE+$80 BMI LA632 ;Always LA631 PLA LA632 STA (BASL),Y ;Replace it PLA LA635 INC Z4E ;Delay BNE LA645 INC Z4E+1 PHA LDA #$3F AND Z4E+1 CMP #$01 PLA BCC LA624 LA645 BIT KBD BPL LA635 ; STA (BASL),Y ;Got a key, store it @ screen location LDA KBD BIT KBDSTROBE RTS ; LA653 JMP (KSWL) ;================================================= ; (A)= $80 - set ucase ; = $40 ; = $7F - clear ucase ; = $00 ; ; Output ; CaseMode - 1000 0000 - ucase only ; - 0100 0000 - disable lcase ; - 0000 0000 - lcase ; LA656 AND CaseMode DB $2C LA659 ORA CaseMode STA CaseMode RTS ;================================================= ; Get char and do some char mapping if necessary ; LA65E JSR RDCHAR JSR LA668 ;Chk the key BCS LA65E RTS ; LA667 DB $00 ;Keyed in char ; ; If //e, //c or later, /// emulation just return ; with C=0 and (A)= char keyed in ; For ][/][+, map the char and save in InBuf if char is valid ; Input ; (A)= char ; Output ; C=1 - ignore key ; C=0 - accept key ; (A) - modified char ; LA668 AND #$7F CMP #$5F ;Underscore _ BCS LA6CB ;If $5F-$7F, ret w/C=0, (A)=key STA LA667 LDA #%00001000 BIT MACHID ;//c or later? BNE LA6C8 ;Yes BMI LA6C8 ;//e ; ; ][/][+ ; LDA VideoSlt ;Is there a video card? BNE LA6C8 ;Yes LDA LA667 CMP #']' BCS LA6A2 ;$5D -> $4D CMP #'[' BCS LA6CB ; [ or \ CMP #$1E BEQ LA69D ;ctrl-^ -> ^ CMP #$00 BEQ LA69D ;ctrl-@ -> @ CMP #$1D BEQ LA69B ;ctrl-] -> ] CMP #'@' BEQ LA6A2 ;->$50 (P) BNE LA6A5 ;always ; LA69B LDA #'|' LA69D ORA #$40 JMP LA6B2 ; LA6A2 EOR #$10 CLC LA6A5 BCC LA6B2 BIT CaseMode ;Is case disabled? BVS LA6CB ;Yes BIT BUTN2 ;1-wire shift down? BPL LA6CB ;No ORA #$20 LA6B2 CMP #CTRLE ;Enable lcase? BEQ LA6C1 ;Yes CMP #CTRLW ;Disable lcase? BNE LA6CB LDA #$40 ;Yes JSR LA659 SEC RTS ; LA6C1 LDA #$00 JSR LA656 SEC RTS ; LA6C8 LDA LA667 LA6CB CLC RTS ; LA6CD CMP #DEL BEQ LA6D5 CMP #BS BNE LA6E6 ; LA6D5 DEX CPX #-1 ;Was cursor @ BOL? BEQ LA708 ;Yes LDA InBuf,X AND #$7F INX CMP #SPACE ;ctrl-chars? BCC LA712 ;Yes LDA #BS ;Printable chars so do BS ; LA6E6 CMP #TAB ;CTRLI BCC LA6EE CMP #SPACE BCC LA6F1 LA6EE JSR XB343 ;Printable char ; LA6F1 CMP #CTRLX BEQ LA703 CMP #BS BEQ LA712 CPX #248 BCC LA700 JSR XB33D ;Sound the alarm LA700 INX BPL LA716 LA703 LDA #'\' ;Cancel input JSR XB343 LA708 JSR XB339 ;Display a CR i.e. start entry on a new line ;================================================= ; Input cmd line ; LA70B EQU * ;ENTRY LDA Prompt ;prompt JSR XB343 LA710 LDX #1 LA712 TXA BEQ LA708 DEX LA716 BIT RDROM2 LDA #%00001000 BIT MACHID BNE LA729 ;//c or later BMI LA729 ;//e or /// emulation JSR LA65E ;Get char fr ][ kbd ORA #$80 BMI LA72C ;always ; LA729 JSR RDCHAR LA72C BIT RDBANK2 CMP #CTRLU+$80 BNE LA73B ; LDY CH LDA (BASL),Y ;Pick char fr screen location BMI LA73B ORA #$E0 LA73B STA InBuf,X AND #$7F CMP #CR BNE LA6CD ; TXA ;Got a CR PHA LA746 LDA InBuf,X ;Remove msb fr all AND #$7F STA InBuf,X ; preceding chars DEX BPL LA746 ; PLA TAX LDA #$1D ;ctrl-] -> $9D (clrEOL) JSR XB343 JMP XB339 ;Do a CR ;================================================= ; Checks for an 80-col card ; Output ; (X)=$C3 80-col card detected in slot 3 ; (X)=$00 no 80-col card ; LA75B EQU * ;ENTRY LDX #$C3 LDA #%00000010 ;Is 80-col card present? BIT MACHID BEQ LA76B ;Maybe LDA SLTBYT AND #%00001000 ;Is there a ROM in slot 3? BNE LA787 ;Yes (NB. (X)=$C3) ; LA76B LDA #$01 ;Pascal v1.1 Protocol? CMP XC30B BNE LA785 ;No CMP XC30B ;Useless instructions BNE LA785 CMP XC30B BNE LA785 ; ; Device signature byte=$8x if 80-col card ; LDA XC30C ;Get Device Signature byte AND #$F0 ;=$x0 CMP #$80 :80-column card? BEQ LA787 ;Yes LA785 LDX #$00 ;No 80-col card LA787 RTS ;================================================= ; Reset I/O hooks ; LA788 EQU * ;ENTRY LDX VideoSlt ;=$Cs ; ; If you enter here, set (X)=$Cs or $00 ; LA78A EQU * ;ENTRY TXA STX VideoSlt BEQ LA7AB ;If (X)=0, init video ; CPX CSWL+1 BEQ LA7AA ;Already setup ; LDA #$00 STA CSWL STX CSWL+1 ;=$Cs00 LDA #CR JSR XB343 ;Init the card LDX VideoSlt CPX KSWL+1 BEQ LA7AA STX KSWL+1 ;=$C300 LDA #$00 STA KSWL LA7AA RTS ; LA7AB LDA CSWL+1 CMP #$C3 BNE LA7E0 ; LDA XC30C ;Device signature byte CMP #$81 ;ALS Smarterm card? BNE LA7D0 ; LDA #CTRLT+$80 BIT RDROM2 JSR COUT LDA #'A'+$80 JSR COUT LDA #'1'+$80 JSR COUT BIT RDBANK2 JMP LA7E0 ; LA7D0 LDA #CTRLU+$80 BIT RDROM2 ;Read ROM JSR COUT BIT RDBANK2 ;Read only RAM bank 2 LDA #$40 ;LCase off JSR LA656 ; ; Setup Editor's I/O Hooks (Apple ][) ; LA7E0 LDA #>XB3D9 ;Use CmdInt's CSW LDX #LA624 ; but use Editor's KSW STA KSWL LDA #LDE18 CLC ADC #1 ;Skip 1st byte STA Reg0 LDA #LA8C6 LDY #X2000 STA A1 LDA #X2000+$1000-1 STA A2 LDA #