Mercurial > hg > Members > kono > nitros9-code
view 3rdparty/packages/basic09/runbcd.asm @ 3054:22ddd48b4ec2
level1 krn: Fix scheduler bug that only affected 6309
The original 6809 binary was correct, but it was disassembled
and interpreted wrongly, so that reassembly went wrong on 6309.
author | Tormod Volden <debian.tormod@gmail.com> |
---|---|
date | Sun, 25 Jan 2015 22:36:02 +0100 |
parents | b91cc65dbe4a |
children |
line wrap: on
line source
NAM Basic09Runtime IFP1 USE defsfile ENDC * RunB from BASICBOOST from Chris Dekker - 6309'ized version of RunB * Created a proper jump table at L204 R.G. 03/05/13 edition equ 1 membase equ $00 memsize equ $02 moddir equ $04 ResTop equ $08 top of reserved space freemem equ $0C table1 equ $0E table2 equ $10 table3 equ $12 table4 equ $14 extnum equ $18 Vsys equ $20 Vinkey equ $22 holdnum equ $25 errpath equ $2E PGMaddre equ $2F starting address program WSbase equ $31 base address workspace errcode equ $36 DATApoin equ $39 address DATA item VarAddr equ $3C address of variable fieldsiz equ $3E it's max. size ArrBase equ $42 SStop equ $44 top of string space area userSP equ $46 subroutine stackpointer exprSP equ $48 current expression exprBase equ $4A expr.stack's base callex equ $5D callcode equ $5F VarPtrba equ $62 vectorba equ $66 excoffse equ $6A module exec.offset excEnd equ $6C expneg equ $75 digits equ $76 decpoint equ $77 negativ equ $78 decimals equ $79 charcoun equ $7D length output string IOpath equ $7F Sstack equ $80 start of current string Spointer equ $82 end of current string subrcode equ $85 fieldwid equ $86 justify equ $87 BUPaddr equ $FB BUPsize equ $FD MODMEM equ $2000 mod MODEND,MODNAM,Prgrm+Objct,$82,ENTRY,MODMEM MODNAM fcs /RunB/ fcb edition * interrupt processing * L93 lda 5,s native mode bra L95 L94 LDA 3,S emulation mode L95 TFR A,DP STB <$35 * oim #$80,<$34 fcb 1,$80,$34 RTI * Check for processor type? procID pshs d comd Will only do COMA on 6809 cmpb 1,s beq L6809 puls pc,d L6809 leax <L6810,pc lbsr prnterr clrb os9 F$Exit L6810 fcc / 6809 detected: can not proceed/ fcb 10,10,13 * adjust parameter format * chprm tfr x,y lbsr skpblank leax -256,x ldb #2 L133 lda ,y+ sta ,x+ copy mod.name incb cmpa #32 Space? bne L133 ldf #$28 '(' stf ,x+ ldf #$2C , L136 clre lbsr skpblank lbsr ISnum bcc L135 number lde #$22 " ste ,x+ string incb L135 lda ,y+ cmpa #34 " ?? beq L135 skip it incb cmpa #13 beq L139 end of list cmpa #32 space ?? bne L138 bsr quote yes!! stf ,x+ bra L136 check if string L138 sta ,x+ bra L135 L139 bsr quote ldf #$29 ) stf ,x+ sta ,x new string complete ldw -2,x Get last 2 chars * NOTE: Was originally CMPW >$2829, changed since seemed wrong * cmpw #'(*256+') Just ()? cmpw $2829 bne L141 No, go process parameters leax -2,x sta ,x delete empty string subb #2 L141 clre tfr b,f string length leay -1,y tfm x-,y- copy -> org. position leax 1,y rts quote tste beq L137 ste ,x+ incb L137 rts ENTRY lbsr procID check processor tfr u,d ldw #256 clr ,-s tfm s,u+ LEAU ,X STD membase INCA STA <$D9 STD Sstack STD Spointer inca inca STD userSP STD SStop INCA TFR D,S STD moddir INCA STD ResTop STD exprBase tfr x,y lbsr skpblank L90 lda ,y+ cmpa #32 beq L89 cmpa #13 beq L97 no params bra L90 skip modulename L89 lbsr skpblank cmpa #40 left par.?? beq L97 format OK lbsr L302 check char bcc L99 = letter or number cmpa #45 = - beq L99 cmpa #47 = / bne L97 do not adjust format L99 lbsr chprm L97 TFR X,D SUBD membase STD memsize LDB #1 default errpath STB <$2E LDA #3 Close all paths 4-16 L92 os9 I$Close INCA CMPA #$10 BLO L92 CLR <$35 PSHS X,DP pshs x,y Setup up a stack big enough for 6309 RTI pshs u,y,x,dp,d,cc leax <ckexit,pc Point to routine below stx 10,s Save as return address from RTI for both 6809 stx 12,s & 6309 stacks stw 6,s rti Pull all regs & return ckexit leax ,x X pointing to where it is supposed to? beq ntive Yes, we are in native mode lda #7 beep to signal pshs a emulation mode leax ,s ldy #1 lda #1 os9 I$Write leas 3,s clear stack leax L94,pc bra L96 ntive LEAX L93,PC L96 puls dp os9 F$Icpt ldx moddir ldw ResTop subr x,w clr ,-s tfm s,x+ clear module dir leas 1,s TFR DP,A LDB #$50 LEAX L1382,PC ldw #17 tfm x+,d+ init RND & syscall LEAX L710,PC STX table1 LEAX L1386,PC STX table2 LEAX L1388,PC STX table3 LDA #$7E STA table4 LEAX L1390,PC STX <table4+1 ldx #$FFFF init links stx Vsys stx Vinkey PULS Y BSR L102 LDX moddir LDD ,X STD PGMaddre BSR L134 L102 LEAX <L106,PC PULS U BSR L108 PSHS U CLR <$34 LDD membase ADDD memsize SUBD ResTop STD freemem LEAU 2,S STU userSP STU SStop LEAS >-$FE,S JMP [-2,U] err43 LDB #$2B L118 LBSR PRerror L116 LDS <$B7 PULS d STD <$B7 ClrSstac lde #1 ste charcoun LDW Sstack STW Spointer rts L108 LDD <$B7 PSHS d STS <$B7 LDD 2,S STX 2,S TFR D,PC L106 BSR L102 BRA BYE * ----------------------- * L134 LBSR skpblank LBSR link BCS err43 LDX ,X STX PGMaddre LDA 6,X BEQ L144 ANDA #$0F CMPA #2 B09 program? BNE err51 BRA L148 L144 LDA <$17,X BASIC09 program has no errors? RORA BCS err51 Errors, report it L148 LBSR L230 check prmlist LDY exprBase LDB ,Y CMPB #$3D BEQ err51 STY excoffse LDX <$AB STX excEnd LDX PGMaddre LDA <$17,X RORA BCS err51 LEAS >$0102,S LDD membase ADDD memsize TFR D,Y STD userSP STD SStop LDU #0 STU WSbase STU <$B3 INC <$B4 CLR errcode LDD exprBase LDX freemem PSHS X,d LEAX <L154,PCR BSR L108 LDX exprBase LBSR L670 set up prm stack LBSR ClrSstac LDX PGMaddre LBSR L676 execute module LBRA L116 L154 PULS X,d STD exprBase STX freemem LBRA L116 err51 LDB #$33 LBRA L118 * ----------------------- * BYE BSR unlink CLRB os9 F$Exit * KILL JSR table4 LDY 1,Y PSHS X LBSR skpblank pshs y LBSR ISlett BCS L164 invalid string LEAY 1,Y L304 LDA ,Y+ LBSR L302 number/letter? BCC L304 * oim #$80,-2,y fcb $61,$80,$3e puls y BSR L166 in moddir? BCS L164 ldu ,x++ module address os9 F$UnLink * update module directory * leay -2,x L176 LDD ,X++ L178 STD ,Y++ BNE L176 CMPD ,Y BNE L178 clear old data PULS PC,X L164 COMB LDB #$2B error 43 puls pc,x unlink LDY Spointer LDA #$2A = * STA ,Y STA <$35 CLR PGMaddre ldx moddir L172 LDU ,X++ module address beq L175 os9 F$Unlink bra L172 next module * clear module dir * L175 tfr x,w ldd moddir subr d,w w=length of moddir tfm x,d+ rts L166 PSHS U,Y LDX moddir L182 LDY ,S LDU ,X++ module address BEQ L180 end of directory LDD 4,U name offset LEAU D,U address of name L184 LDA ,U+ EORA ,Y+ ANDA #$DF BNE L182 next module TST -1,U BPL L184 next char CLRA found it! L186 LEAX -2,X PULS PC,U,d L180 COMA BRA L186 link BSR L166 BCS L188 not in mod.dir. RTS L188 PSHS U,Y,X LDB 1,S CMPB #$FE blo L190 ldb #32 error 32 lbra L118 L190 LEAX ,Y clrd os9 F$Link BCC L192 LDX 2,S module not in mem. clrd os9 F$Load BCS L194 L192 STX 2,S STU [,S] add to moddir L194 PULS PC,U,Y,X PRerror os9 F$PErr RTS L650 PSHS X,d L208 LEAX <L204,PC LDA ,Y+ L206 CMPA ,X++ BLO L206 LDB ,-X JMP B,X * embedded jumptable * do not change until L264 L204 fcb $F2 fcb LA2-* fcb $92 fcb LA4-* fcb $91 fcb LA2-* fcb $90 fcb L210-* fcb $8f fcb LA1-* fcb $8e fcb LA2-* fcb $8d fcb LA3-* fcb $55 fcb LA2-* fcb $4b fcb LA4-* fcb $3e fcb L21C-* fcb $00 fcb LA4-* LA1 LEAY 3,Y LA2 LEAY 1,Y LA3 LEAY 1,Y LA4 BRA L208 L210 TST ,Y+ BPL L210 BRA L208 L21C PULS PC,X,d * check param list for: fcb 0,7,3 L264 fcb L272-L270,75,12,172 , fcb L272-L270,77,12,168 ( fcb L272-L270,78,12,169 ) fcb L18-L270,137,12,174 " fcb L17-L270,144,6,162 . fcb 0,145,6,164 $ fcb L272-L270,63,2,141 % * error: print problem statement * and point to error L236 LDA #12 L252 PSHS A LDX <$A7 strip high order bits LDA #$0D L218 fcb $62,$7f,$84 *L218 aim #$7F,,x CMPA ,X+ BNE L218 LDX <$A7 BSR prnterr LDD <$B9 SUBD <$A7 tfr b,f clre LDX <$AF STX <$AB LDY <$A7 LDA #$3D LBSR L222 LDA #$3F LBSR L222 LDA #$20 Bunch of spaces pshs a LDX Sstack tfm s,x+ LDD #$5E0D ^ + CR STD -1,X LDX Sstack BSR prnterr PULS D LBSR PRerror LDX userSP STX SStop LBRA L116 prnterr LDY #$0100 LDA errpath os9 I$WritLn RTS **** decode parameters passed *** L230 STY <$A7 LDX exprBase STX <$AF STX <$AB INC <$A0 BSR L232 BSR L234 CLR <$A0 LDA <$A3 CMPA #$3F % ?? BNE L236 error 12 LBRA L222 L234 CMPA #$4D ( ?? BNE L238 no params L246 LBSR L222 LDD <$AB BSR L242 LDB <$A4 CMPB #6 . or $ ?? BNE L238 BSR L232 BSR L244 BEQ L246 PSHS A BRA L248 L238 RTS L232 BSR L242 LDX <$AD STX <$AB LDA <$A3 RTS L244 LDA <$A3 CMPA #$4B , ?? L250 RTS L254 LDA <$A3 CMPA #$4E ) ?? BEQ L250 end of list LDA #$25 error 37 L256 LBRA L252 L248 BSR L254 PULS A LBSR L222 BRA L232 err10 LDA #$0A BRA L256 L242 LDD <$AB STD <$AD LBSR skpblank STY <$B9 LDA ,Y LBSR ISnum BCC L262 LEAX L264,PCR LDA #$80 LBSR L266 ill. chars in prmlist? BEQ err10 yes!! LDB ,X LEAU <L270,PC JMP B,U L272 LDD 1,X STB <$A4 STA <$A3 LBRA L222 L18 LDA ,Y LBSR ISnum BCS L272 NO!! LEAY -1,Y L262 BSR L274 BNE L276 LDD #$8F05 L282 STA <$A3 tfr d,w clre pshs u ldu <$AB addr u,w subw exprBase cmpf #$FF bcc err13 tfr d,w clre L280 sta ,u+ LDA ,X+ DECF BPL L280 stu <$AB puls u LDA #6 STA <$A4 RTS L276 LDD #$8E02 TST ,X BNE L282 LDD #$8D01 LEAX 1,X BRA L282 L270 LEAY -1,Y BSR L274 LDD #$9102 BRA L282 L274 BSR skpblank LEAX ,Y LDY SStop LBSR AtoITR string -> number EXG X,Y BCS err22 LDA ,X+ CMPA #2 RTS err22 LDA #$16 BRA L288 L17 BSR L272 BRA L290 L294 BSR L222 L290 LDA ,Y+ CMPA #$0D BEQ err41 CMPA #$22 " ?? BNE L294 CMPA ,Y+ BEQ L294 LEAY -1,Y LDA #$FF L278 BRA L222 err41 LDA #$29 L288 LBRA L252 LDA #$31 error 49 (HOW DOES IT GET HERE?) BRA L288 L222 PSHS X,D LDX <$AB STA ,X+ STX <$AB LDD <$AB SUBD exprBase CMPB #$FF BCC err13 CLRA PULS PC,X,D err13 LDA #$0D LBSR PRerror LBRA L116 * skpblank LDA ,Y+ CMPA #$20 BEQ skpblank skip blanks CMPA #$0A BEQ skpblank and LF's LEAY -1,Y RTS L302 BSR ISlett BCC L308 ISnum CMPA #$30 0 ?? BCS L308 CMPA #$39 9 ?? BLS L310 BRA L312 ISlett ANDA #$7F CMPA #$41 A ?? BCS L308 CMPA #$5A Z ?? BLS L310 CMPA #$5F _ ?? BEQ L308 CMPA #$61 a ?? BCS L308 CMPA #$7A z ?? BLS L310 L312 ORCC #1 NO RTS L310 ANDCC #$FE YES L308 RTS * search prm list for special chars * L266 PSHS U,Y,X,A LDU -3,X LDB -1,X L326 STX 1,S CMPU #0 USE CMPR 0,U (SAME SPEED, 2 BYTES SHORTER) BEQ L320 LEAU -1,U LDY 3,S LEAX B,X L328 LDA ,X+ EORA ,Y+ BEQ L322 CMPA ,S BEQ L322 LEAX -1,X L324 LDA ,X+ BPL L324 BRA L326 L322 TST -1,X BPL L328 STY 3,S L320 PULS PC,U,Y,X,A L710 fdb L1900-L710 table @ L204 fdb L1900-L710 PARAM fdb L1900-L710 TYPE fdb L1900-L710 DIM fdb L1900-L710 DATA fdb STOP-L710 fdb BYE-L710 fdb L386-L710 TRON fdb L386-L710 TROFF fdb L386-L710 PAUSE fdb DEG-L710 fdb RAD-L710 fdb RETURN-L710 fdb L370-L710 fdb LET-L710 fdb POKE-L710 fdb IF-L710 fdb GOTO-L710 = ELSE fdb ENDIF-L710 fdb FOR-L710 fdb NEXT-L710 table @ L388 fdb UNTIL-L710 = WHILE fdb GOTO-L710 = ENDWHILE fdb L370-L710 = REPEAT fdb UNTIL-L710 fdb L370-L710 = LOOP fdb GOTO-L710 = ENDLOOP fdb UNTIL-L710 = EXITIF fdb GOTO-L710 = ENDEXIT fdb ON-L710 fdb ERROR-L710 fdb errs51-L710 fdb GOTO-L710 fdb errs51-L710 fdb GOSUB-L710 fdb RUN-L710 fdb KILL-L710 fdb INPUT-L710 fdb PRINT-L710 fdb CHD-L710 fdb CHX-L710 fdb CREATE-L710 fdb OPEN-L710 fdb SEEK-L710 fdb READ-L710 fdb WRITE-L710 fdb GET-L710 fdb PUT-L710 fdb CLOSE-L710 fdb RESTORE-L710 fdb DELETE-L710 fdb CHAIN-L710 fdb SHELL-L710 fdb BASE0-L710 fdb BASE1-L710 fdb 386-L710 REM fdb 386-L710 fdb END-L710 * From here on is added from original BASIC09 table @ L1D60 fdb L1943-L710 go to next instruction fdb L1943-L710 fdb L1944-L710 jump to [regs.x] fdb errs51-L710 fdb L386-L710 RTS fdb L386-L710 fdb CpMbyte-L710 fdb CpMint-L710 fdb CpMreal-L710 fdb CpMbyte-L710 fdb CpMstrin-L710 fdb CpMarray-L710 L448 fcc /STOP Encountered/ fcb 10,255 * * setup workspace for module L676 LDA $17,X BITA #1 BEQ L346 LBRA errs51 L346 TFR S,D deca CMPD Sstack BCC L350 LDB #$39 error 57 (system stack overflow) BRA L348 L350 LDD freemem SUBD $0B,X BCS err32 CMPD #$0100 BCC L354 err32 LDB #$20 L348 LBRA L356 L354 STD freemem TFR Y,D SUBD $0B,X EXG D,U STS 5,U STD 7,U STX 3,U L344 LDD #1 default:base 1 STD ArrBase STA 1,U default: radians STA <$13,U STU $14,U BSR L358 LDD <$13,X BEQ L360 ADDD excoffse L360 STD DATApoin LDW $0B,X LDD <$11,X LEAY D,U subr d,w bls L362 clr ,-s tfm s,y+ LEAS 1,S L362 LDX PGMaddre LDD excoffse ADDD <$15,X TFR D,X BRA L366 start execution * L358 STX PGMaddre STU WSbase LDD $0D,X ADDD PGMaddre STD VarPtrba LDD $0F,X ADDD PGMaddre STD vectorba STD excEnd LDD 9,X ADDD PGMaddre STD excoffse LDD $14,U STD userSP STD SStop RTS *** MAIN LOOP L372 LDA <$34 Check if signal received BPL L368 No, execute next instruction ANDA #$7F flag signal received STA <$34 LDB <$35 BNE L348 process it L368 BSR L370 L366 CMPX excEnd BCS L372 BRA L374 * END LDB ,X LBSR nextinst BEQ L374 LBSR PRINT L374 LDU WSbase LDS 5,U LDU 7,U L386 RTS L1943 LEAX 2,X L370 LDB ,X+ BPL L382 ADDB #$40 L382 ASLB CLRA LDU table1 = L710 LDD D,U JMP D,U go to instruction * IF JSR table4 if.... TST 2,Y BEQ GOTO = FALSE LEAX 3,X THEN LDB ,X CMPB #$3B BNE L386 LEAX 1,X ELSE GOTO LDD ,X ADDD excoffse TFR D,X RTS ENDIF LEAX 1,X RTS UNTIL JSR table4 TST 2,Y BEQ GOTO = FALSE LEAX 3,X RTS * L388 fdb L70-L388 int. step 1 fdb L71-L388 int. step x fdb L72-L388 real step 1 fdb L73-L388 real step x * NEXT LEAY <L388,PC L414 LDB ,X+ ASLB LDD B,Y LDU WSbase JMP D,Y L75 LDD ,X LEAY D,U BRA L390 L76 LDD ,X LEAY D,U LDD 4,X LDA D,U BPL L390 BRA L392 * FOR .. NEXT /integer * L70 LDD ,X offset counter LEAY D,U address counter LDD ,Y incd increment counter STD ,Y L390 LDD 2,X offset target LEAX 6,X LDD D,U target value CMPD ,Y BGE GOTO loop again LEAX 3,X RTS * FOR .. NEXT .. STEP /integer * L71 LDD ,X LEAY D,U LDD 4,X LDD D,U tfr a,e ADDD ,Y update counter STD ,Y tste BPL L390 incrementing L392 LDD 2,X LEAX 6,X LDD D,U CMPD ,Y BLE GOTO loop again LEAX 3,X RTS L77 LDY userSP CLRB BSR L394 BRA L396 L78 LDY userSP CLRB BSR L394 LDD 4,X ADDD #4 LDU WSbase LDA D,U LSRA examine sign BCC L396 BRA L398 * FOR .. NEXT /real * L72 LDY userSP CLRB BSR L394 LEAY -6,Y LDD #$0180 step 1 (save in temp var) STD 1,Y clrd STD 3,Y STA 5,Y LBSR RLADD LDQ 1,Y STQ ,U LDA 5,Y STA 4,U L396 LDB #2 incrementing BSR L394 LEAX 6,X LBSR RLCMP LBLE GOTO loop again LEAX 3,X RTS L394 LDD B,X copy number ADDD WSbase TFR D,U LEAY -6,Y LDA #2 LDB ,U STD ,Y LDQ 1,U STQ 2,Y RTS * FOR .. NEXT .. STEP /real * L73 LDY userSP CLRB BSR L394 STU <$D2 LDB #4 BSR L394 LDA 4,U STA <$D1 LBSR RLADD incr. counter LDU <$D2 LDQ 1,Y STQ ,U LDA 5,Y STA 4,U LSR <$D1 check sign BCC L396 L398 LDB #2 decrementing BSR L394 LEAX 6,X LBSR RLCMP LBGE GOTO loop again LEAX 3,X RTS ******* table for FOR ******** L412 fdb L75-L412 int. step 1 fdb L76-L412 int. step x fdb L77-L412 real step 1 fdb L78-L412 real step x * FOR LDB ,X+ CMPB #$82 BEQ L405 BSR CpMint BSR L410 LDB -1,X CMPB #$47 BNE L408 BSR L410 L408 LBSR GOTO LEAY <L412,PC LBRA L414 L410 LDD ,X++ ADDD WSbase PSHS d JSR table4 LDD 1,Y STD [,S++] RTS L405 BSR CpMreal BSR L418 LDB -1,X CMPB #$47 BNE L408 BSR L418 BRA L408 L418 LDD ,X++ ADDD WSbase PSHS d JSR table4 BRA L420 LET JSR table4 get var. type L422 CMPA #4 BCS L442 PSHS U LDU fieldsiz L442 PSHS U,A LEAX 1,X JSR table4 L516 PULS A ASLA LEAU <L424,PC JMP A,U copy L424 BRA L426 byte BRA L428 integer BRA L420 real BRA L426 boolean BRA L430 string BRA L432 array CpMbyte LDD ,X ADDD WSbase PSHS D LEAX 3,X JSR table4 L426 LDB 2,Y STB [,S++] RTS CpMint LDD ,X ADDD WSbase PSHS d LEAX 3,X JSR table4 L428 LDD 1,Y STD [,S++] RTS CpMreal LDD ,X ADDD WSbase PSHS d LEAX 3,X JSR table4 L420 PULS U LDQ 1,Y STQ ,U LDA 5,Y STA 4,U RTS CpMstrin LDD ,X ADDD vectorba TFR D,U LDQ ,U ADDD WSbase PSHS D PSHSW LEAX 3,X JSR table4 L430 PULS U,D D=Max Size of string to copy ldw 3,y stw BUPsize incw Allow for $FF terminator cmpr d,w Other string big enough? bls L431 Yes, copy tfr d,w No, only copy smaller size stw BUPsize L431 ldd 1,y Get address of string to copy STD exprSP Save it stu BUPaddr Save address of destination string tfm d+,u+ Copy (ignore $FF?) clra clear carry RTS CpMarray LBSR L728 LBRA L422 L432 PULS U,D ldw 3,y cmpr d,w BLS L444 tfr d,w L444 ldd 1,y tfm d+,u+ rts POKE JSR table4 LDD 1,Y PSHS d JSR table4 LDB 2,Y STB [,S++] RTS STOP LBSR PRINT LDA errpath STA IOpath LEAX L448,PC LBSR Sprint LBRA L116 exit GOSUB LDD ,X LEAX 3,X L464 LDY WSbase LDU $14,Y CMPU exprBase BHI L456 LDB #$35 error 53 LBRA L356 L456 STX ,--U pshs x (pshu x?) STU $14,Y STU userSP ADDD excoffse TFR D,X address subroutine RTS RETURN LDY WSbase CMPY $14,Y BHI L458 LDB #$36 error 54 LBRA L356 L458 LDU $14,Y LDX ,U++ puls x (pulu x) STU $14,Y STU userSP RTS ON LDD ,X CMPA #$1E BEQ L460 set trap JSR table4 LDD ,X asld asld incd incd LEAU D,X PSHS U LDD 1,Y BLE L462 CMPD ,X++ BHI L462 decd asld asld incd LDD D,X PSHS d LDB ,X CMPB #$22 PULS X,d BEQ L464 ADDD excoffse TFR D,X RTS L462 PULS PC,X L460 LDU WSbase CMPB #$20 BNE L466 clear trap LDD 2,X ADDD excoffse STD <$11,U LDA #1 STA <$13,U LEAX 5,X RTS L466 CLR <$13,U LEAX 2,X RTS CREATE BSR L468 LDB #$0B R/W/PR os9 I$Create BRA L470 OPEN BSR L468 os9 I$Open L470 LBCS L356 error PULS U,B CMPB #1 BNE L472 store as byte CLR ,U+ integer L472 STA ,U path number PULS PC,X L468 LEAX 1,X LBSR getvar LEAX 1,X JSR table4 LDA #3 default: UPDATE CMPB #$4A BNE L476 LDA ,X++ access mode L476 LDU 3,S STX 3,S LDX 1,Y JMP ,U = RTS SEEK LBSR setpath JSR table4 LBSR setFP set filepointer LBCS errman RTS L500 fcc /? / fcb 255 L514 fcc /** Input error - reenter **/ fcb 13,255 INPUT LDA errpath LBSR setpath LDA #$2C STA <$DD PSHS X L508 LDX ,S LDB ,X CMPB #$90 BNE L498 use default JSR table4 PSHS Y,X LDX 1,Y get prompt ldy 3,y BRA L490 L498 PSHS Y,X LEAX <L500,PC default prompt ldy #2 L490 lda IOpath os9 I$WritLn PULS Y,X LDA IOpath CMPA errpath BNE L502 LDA <$2D STA IOpath L502 LBSR READLN BCC L504 NO error CMPB #3 LBNE errman LBSR L506 BREAK pressed CLR errcode BRA L508 L504 BSR L510 check input BCC L512 LEAX <L514,PC input error BSR Sprint BRA L508 try again L512 LDB ,X+ CMPB #$4B BEQ L504 more items!! PULS PC,d L510 BSR getvar LDB ,S ADDB #7 LDY userSP LBSR L46 LBCC L516 L518 LEAS 3,S clear stack COMA signal an error RTS *print a message Sprint pshs y,x ldy Sstack L473 lda ,x+ sta ,y+ cmpa #$FF bne L473 leay -1,y sty <$Spointer lbsr WRITLN puls pc,y,x getvar LDA ,X+ CMPA #$0E vectored variable? BNE L520 JSR table4 BRA L522 L520 SUBA #$80 CMPA #4 BCS L524 byte,int,real BEQ L526 string LBSR L728 array BRA L522 L526 LDD ,X++ ADDD vectorba TFR D,U LDQ ,U stw fieldsiz BRA L528 L524 LDD ,X++ L528 ADDD WSbase TFR D,U LDA -3,X SUBA #$80 L522 PULS Y CMPA #4 BCS L530 PSHS U LDU fieldsiz L530 PSHS U,A JMP ,Y = RTS * set IO path * called by #path statement setpath LDB ,X CMPB #$54 path number given? BNE L532 LEAX 1,X JSR table4 CMPB #$4B string follows? BEQ L534 LEAX -1,X L534 LDA 2,Y L532 STA IOpath RTS READ LDB ,X CMPB #$54 BNE L536 read from DATA statement BSR setpath CLR <$DD CMPB #$4B BNE L538 LEAX -1,X L538 LBSR READLN BCC L540 CMPB #$E4 error 228 ? BEQ L538 L542 LBRA errman L544 LBSR L510 check input BCS L542 L540 LDB ,X+ CMPB #$4B BEQ L544 more items RTS L536 BSR nextinst BEQ L546 literal data * process data statements that are expressions L550 BSR L548 LDB ,X+ CMPB #$4B BEQ L550 RTS L548 LBSR getvar BSR L552 get data item LDA ,S BNE L554 INCA L554 CMPA ,Y LBEQ L516 CMPA #2 BCS L556 byte,integer BEQ L558 real numbers err71 LDB #$47 BRA L560 L556 LDA ,Y CMPA #2 BNE err71 LBSR FIX LBRA L516 L558 CMPA ,Y BCS err71 LBSR FLOAT LBRA L516 * L546 LEAX 1,X L552 PSHS X LDX DATApoin BNE L568 LDB #$4F error 79 L560 LBRA L356 L568 JSR table4 CMPB #$4B BEQ L570 LDD ,X ADDD excoffse TFR D,X L570 STX DATApoin PULS PC,X * instruction delimiters nextinst CMPB #$3F = end of line BEQ L572 CMPB #$3E = "back slash" L572 RTS PRINT LDA errpath LBSR setpath LDD Sstack STD Spointer LDB ,X+ CMPB #$49 print using BEQ L574 L584 BSR nextinst BEQ L576 L586 CMPB #$4B comma separator? BEQ L578 CMPB #$51 semi-colon? BEQ L580 LEAX -1,X JSR table4 get variable address LDB ,Y incb LBSR L46 copy to Sstack LBCS errman LDB -1,X BRA L584 L578 LBSR L2012 print spaces lbcs errman L580 LDB ,X+ BSR nextinst BNE L586 BRA L588 L576 lbsr Strterm lbcs errman L588 lbsr WRITLN lbcs errman RTS L574 JSR table4 LDD exprBase STD <$8E STD <$8C LDU userSP PSHS U,d LDD exprSP STD exprBase L598 LDB -1,X BSR nextinst BEQ L594 LDB ,X+ BSR nextinst BEQ L596 LEAX -1,X LBSR PRNTUSIN BCC L598 PULS U,d error encountered STD exprBase STU userSP LBRA errman L596 LEAY <L588,PC BRA L600 L594 LEAY <L576,PC L600 PULS U,d STD exprBase STU userSP JMP ,Y WRITE LDA errpath LBSR setpath LDU Sstack STU Spointer LDB ,X+ LBSR nextinst BEQ L602 CMPB #$4B comma separator? BEQ L604 LEAX -1,X BRA L604 L606 CLRA LBSR L1632 LBCS errman L604 JSR table4 LDB ,Y incb LBSR L46 LBCS errman LDB -1,X LBSR nextinst BNE L606 L602 LBRA L576 GET BSR L608 stx BUPaddr os9 I$Read sty BUPsize BRA L610 PUT BSR L608 os9 I$Write L610 LEAX ,U BCC L612 L620 LBRA L356 L608 LBSR setpath LBSR getvar LEAU ,X PULS A CMPA #4 bcs L609 puls y bra L618 L609 LEAX L616,PC LDB A,X CLRA TFR D,Y L618 PULS X LDA IOpath L612 RTS CLOSE LBSR setpath os9 I$Close BCS L620 CMPB #$4B BEQ CLOSE multiple paths RTS RESTORE LDB ,X+ CMPB #$3B BEQ L624 to line ... LDU PGMaddre LDD <$13,U rewind L626 ADDD excoffse STD DATApoin RTS L624 LDD ,X incd LEAX 3,X BRA L626 DELETE JSR table4 PSHS X LDX 1,Y os9 I$Delete L628 BCS L620 PULS PC,X CHD JSR table4 LDA #3 read & write L630 PSHS X LDX 1,Y os9 I$ChgDir BRA L628 CHX JSR table4 LDA #4 execute BRA L630 CHAIN JSR table4 LDY 1,Y PSHS U,Y,X LBSR unlink PULS U,Y,X BSR L634 set up registers STS <$B1 Save stack ptr LDS Sstack os9 F$Chain LDS <$B1 If gets this far, chain failed BRA L356 SHELL JSR table4 PSHS U,X LDY 1,Y BSR L634 set up registers os9 F$Fork BCS L356 PSHS A Save child's process # L636 os9 F$Wait Wait for child to die CMPA ,S Our child? BNE L636 No, wait for next death LEAS 1,S TSTB BNE L356 PULS PC,U,X L638 fcc /SHELL/ fcb 13 L634 LDX exprSP LDA #$0D STA -1,X leau ,y subr y,x TFR X,Y LEAX <L638,PC clrd RTS ERROR JSR table4 LDB 2,Y L356 STB errcode errman LDU WSbase BEQ L640 not running subroutine TST <$13,U BEQ L642 no error trap LDS 5,U LDX <$11,U LDD $14,U STD userSP LBRA L372 process error L642 BSR L506 LBRA L116 exit L640 LBSR PRerror LBRA L116 exit L646 fcb 14,255 Force text mode in VDGINT L506 LEAX <L646,PC LBSR Sprint LBSR unlink LDB errcode os9 F$Exit BASE0 CLRB BRA L648 BASE1 LDB #1 L648 CLRA STD ArrBase LEAX 1,X RTS L1944 EXG X,PC RTS L1900 LEAY ,X LBSR L650 jumptable @ L204 LEAX ,Y RTS errs51 LDB #$33 BRA L356 DEG LDA #1 BRA L652 RAD CLRA L652 LDU WSbase STA 1,U LEAX 1,X RTS INKEY leax 2,x ldd ,x++ cmpd #$4D0E marker lbne err56 clre default path: 0 jsr table4 cmpa #4 = string beq L383 use default path cmpa #2 lbhs err56 invalid type ldw ,u tsta beq L383 path = byte tfr f,e L383 pshsw bsr L391 cmpa #4 string ?? lbne err56 wrong type pulsw pshs x leax ,u ldf #$FF stf ,x null string ldd fieldsiz cmpd #2 blo L385 stf 1,x terminate string L385 tfr e,a path number ldb #SS.Ready os9 I$GetStt bcs L387 no key ldy #1 os9 I$Read bra L389 returns error status L387 cmpb #$F6 not ready ?? beq L389 carry = clear coma signal an error L389 puls pc,x L391 ldd ,x++ cmpd #$4B0E lbne err56 param missing jsr table4 L393 ldb ,x+ cmpb #$4E bne L393 leax 1,x -> next instruction rts SYSCALL ldd 2,x cmpa #$4D marker lbne err56 cmpb #$0E bne L401 leax 4,x callcode = variable jsr table4 lda ,u sta callcode bra L403 L401 lda 5,x callcode = static sta callcode leax 6,x L403 bsr L391 ldd fieldsiz cmpd #10 lbne err56 wrong data structure pshs x pshs u ldd 1,u u -> data ldx 4,u ldy 6,u ldu 8,u jsr <callex tfr u,w puls u leau 8,u pshu y,x,dp,d,cc store returns stw 8,u puls pc,x RUN ldd ,x cmpd Vsys beq syscall cmpd Vinkey lbeq inkey LBSR L728 get address of name PSHS X LDB <$CF CMPB #$A0 mod. name ? BEQ L658 name found LDY exprSP LDW fieldsiz L662 LDA ,U+ copy name decw BEQ L660 STA ,Y+ CMPA #$FF BNE L662 LDA ,--Y L660 ORA #$80 terminate it STA ,Y LDY exprSP LBSR link BCS errs43 LEAU ,X L658 LDD ,U BNE L668 mod. in addr.space LDY <$D2 LEAY 3,Y ldd Vsys cmpd #$FFFF bne L661 lbsr ISsyscal L661 ldd Vinkey cmpd #$FFFF bne L663 lbsr ISinkey L663 LBSR link BCS errs43 LDD ,X STD ,U L668 LDX ,S STD ,S LDU WSbase LDA <$34 STA ,U LDB <$43 STB 2,U LDD exprBase LDW <$40 STQ $0D,U LDD DATApoin STD 9,U LBSR L670 prm stack STX $0B,U next instruction stw BUPaddr clear address PULS X LDA 6,X module type?? BEQ B09subr CMPA #$22 BEQ B09subr CMPA #$21 BEQ MLsubr errs43 LDB #$2B LBRA L356 MLsubr LDD 5,U PSHS B,A STS 5,U LEAS ,Y -> prmstack LDD <$40 subr y,d stacksize lsrd lsrd PSHS d number of elements LDD 9,X LEAY L676,PC JSR D,X run ML subroutine LDU WSbase LDS 5,U PULS X STX 5,U BCC L678 no error on exit LBRA L356 * run Basic09 subroutine * B09subr fcb 2,$7f,$34 * aim #$7F,<$34 ldd #$FFFF std Vsys clear links std Vinkey LBSR L676 LDA ,U BITA #1 BEQ L678 no error on exit LDA ,U STA <$34 L678 LDQ $0D,U reset DP pointers STD exprBase STW <$40 LDD 9,U STD DATApoin LDB 2,U SEX STD ArrBase LDX 3,U LBSR L358 LDX $0B,U LDD SStop SUBD exprBase STD freemem ldd #$FFFF std Vinkey std Vsys RTS ISinkey leax <L613,pc bra L677 ISsyscal leax <L615,pc L677 pshs y L679 lda ,x+ eora ,y+ anda #$DF bne L681 = RTS lda -1,x bpl L679 next char puls u,y clear stack puls x leax -2,x ldw ,x cmpa #$EC l ?? bne L683 stw Vsys lbra syscall L683 stw Vinkey lbra inkey L681 puls pc,y no match L613 fcs /inkey/ L615 fcs /SysCall/ L616 fcb 1,2,5,1 * assemble parameter stack L670 PSHS U leay <L616,pc LDB ,X+ CLRA PSHS Y,X,A CMPB #$4D BNE L684 no params LEAY ,S L696 PSHS Y LDB ,X CMPB #$0E BEQ L686 variable: any type JSR table4 variable type ? LEAX -1,X CMPA #2 BEQ L688 real CMPA #4 BEQ L690 string LDD 1,Y STD 4,Y others LDA ,Y L688 LDB #6 LEAU <L616,PC SUBB A,U LEAU B,Y STU userSP BRA L692 L690 LDU 1,Y LDD 3,y STD fieldsiz LDD exprSP STD exprBase LDA #4 BRA L692 L686 LEAX 1,X JSR table4 variables L692 PULS Y INC ,Y param count CMPA #4 BCS L693 LDD fieldsiz bra L694 L693 ldw 3,y address L616 tfr a,b clra addr d,w ldb ,w L694 PSHS U,D address + size LDB ,X+ CMPB #$4B BEQ L696 get next item LEAX 1,X end of list STX 1,Y = PSHS X LDU userSP STU <$40 ldf ,y clre rolw L700 PULS d STD ,--U DECW BNE L700 LEAY ,U -> stack BRA L704 L684 LDY userSP STY <$40 L704 TFR Y,D SUBD exprBase LBCS err32 STD freemem puls x,a PULS PC,U,D ********************************* fdb MID$-L1386 fdb LEFT$-L1386 fdb RIGHT$-L1386 fdb CHR$-L1386 fdb STR$int-L1386 fdb STR$rl-L1386 fdb DATE$-L1386 fdb TAB-L1386 fdb FIX-L1386 fdb fixN1-L1386 fdb fixN2-L1386 fdb FLOAT-L1386 fdb float2-L1386 fdb LNOTB-L1386 fdb NEGint-L1386 fdb NEGrl-L1386 fdb LANDB-L1386 fdb LORB-L1386 fdb LXORB-L1386 fdb Igt-L1386 fdb Rgt-L1386 fdb Sgt-L1386 fdb Ilo-L1386 fdb Rlo-L1386 fdb Slo-L1386 fdb Ine-L1386 fdb Rne-L1386 fdb Sne-L1386 fdb Bne-L1386 fdb Ieq-L1386 fdb Req-L1386 fdb Seq-L1386 fdb Beq-L1386 fdb Ige-L1386 fdb Rge-L1386 fdb Sge-L1386 fdb Ile-L1386 fdb Rle-L1386 fdb Sle-L1386 fdb INTADD-L1386 fdb RLADD-L1386 fdb STRconc-L1386 fdb INTSUB-L1386 fdb RLSUB-L1386 fdb INTMUL-L1386 fdb RLMUL-L1386 fdb INTDIV-L1386 fdb RLDIV-L1386 fdb POWERS-L1386 fdb POWERS-L1386 fdb DIM-L1386 fdb DIM-L1386 fdb DIM-L1386 fdb DIM-L1386 fdb PARAM-L1386 fdb PARAM-L1386 fdb PARAM-L1386 fdb PARAM-L1386 fcb 0,0,0,0,0,0,0,0,0,0,0,0 ******************************* L1386 fdb BCPVAR-L1386 fdb ICPVAR-L1386 fdb L2102-L1386 copy real number fdb BlCPVAR-L1386 fdb SCPVAR-L1386 fdb L2105-L1386 copy DIM array fdb L2105-L1386 fdb L2105-L1386 fdb L2105-L1386 fdb L2106-L1386 copy PARAM array fdb L2106-L1386 fdb L2106-L1386 fdb L2106-L1386 fdb BCPCNST-L1386 fdb ICPCNST-L1386 fdb RCPCNST-L1386 fdb SCPCNST-L1386 fdb ICPCNST-L1386 fdb ADDR-L1386 fdb ADDR-L1386 fdb SIZE-L1386 fdb SIZE-L1386 fdb POS-L1386 fdb ERR-L1386 fdb MODint-L1386 fdb MODrl-L1386 fdb RND-L1386 fdb PI-L1386 fdb SUBSTR-L1386 fdb SGNint-L1386 fdb SGNrl-L1386 fdb L2122-L1386 transc. functions fdb L2123-L1386 fdb L2124-L1386 fdb L2125-L1386 fdb L2126-L1386 fdb L2127-L1386 fdb EXP-L1386 fdb ABSint-L1386 fdb ABSrl-L1386 fdb LOG-L1386 ln fdb LOG10-L1386 fdb SQRT-L1386 fdb SQRT-L1386 fdb FLOAT-L1386 fdb INTrl-L1386 fdb L1058-L1386 RTS fdb FIX-L1386 fdb FLOAT-L1386 fdb L1058-L1386 RTS fdb SQint-L1386 fdb SQrl-L1386 fdb PEEK-L1386 fdb LNOTI-L1386 fdb VAL-L1386 fdb LEN-L1386 fdb ASC-L1386 fdb LANDI-L1386 fdb LORI-L1386 fdb LXORI-L1386 fdb equTRUE-L1386 fdb equFALSE-L1386 fdb EOF-L1386 fdb TRIM$-L1386 ***************************** L1388 fdb BtoI-L1388 fdb INTCPY-L1388 fdb RCPVAR-L1388 fdb L13-L1388 fdb L14-L1388 fdb L15-L1388 ***************************** L1390 LDY userSP = table4 LDD exprBase STD exprSP clear expr.stack BRA L724 L726 ASLB LDU table2 -> L1386 LDD B,U JSR D,U L724 LDB ,X+ BMI L726 next part CLRA clear carry LDA ,Y RTS instruction done * get size of DIM array L2105 BSR L728 L732 PSHS PC,U LDU table3 -> L1388 ASLA LDD A,U LEAU D,U STU 2,S PULS PC,U * get size of PARAM array L2106 BSR L730 BRA L732 DIM LEAS 2,S LDA #$F2 BRA L734 PARAM LEAS 2,S LDA #$F6 BRA L736 L730 LDA #$89 L736 STA <$A3 CLR <$3B BRA L738 L728 LDA #$85 L734 STA <$A3 STA <$3B L738 LDD ,X++ ADDD VarPtrba STD <$D2 LDU <$D2 points to var. marker LDA ,U ANDA #$E0 STA <$CF EORA #$80 STA <$CE LDA ,U ANDA #7 LDB -3,X SUBB <$A3 PSHS d LDA ,U ANDA #$18 LBEQ L740 LDD 1,U ADDD vectorba TFR D,U LDD ,U STD VarAddr LDA 1,S BNE L742 first access LDA #5 STA ,S LDD 2,U STD fieldsiz clrd BRA L744 L742 LEAY -6,Y clrd STD 1,Y LEAU 4,U BRA L746 L754 LDD ,U should be able to change to raw MULD? STD 1,Y LBSR INTMUL L746 LDD 7,Y SUBD ArrBase adjust to base 0 CMPD ,U++ BLO L750 LDB #$37 error 55 LBRA L356 L750 ADDD 1,Y STD 7,Y DEC 1,S BNE L754 next element LDA ,S BEQ L756 bytes CMPA #2 BCS L758 integers BEQ L760 real numbers CMPA #4 BCS L756 boolean LDD ,U string STD fieldsiz BRA L762 L756 LDD 7,Y number of elements BRA L764 L758 LDD 7,Y asld x 2 L764 LEAY $0C,Y BRA L744 L760 LDD #5 L762 STD 1,Y LBSR INTMUL x 5 (change to internal MULD) LDD 1,Y array size LEAY 6,Y Eat temp var L744 TST <$CE BNE L766 LDW VarAddr ADDW WSbase CMPW <$40 BCC err56 too big! TFR W,U CMPD 2,U BHI err56 too big! ADDD ,U BRA L770 L766 ADDD VarAddr TST <$3B BNE L772 L776 ADDD 1,Y LEAY 6,Y BRA L770 L740 LDA ,S CMPA #4 LDD 1,U BCS L774 ADDD vectorba TFR D,U LDQ ,U STW fieldsiz L774 TST <$3B BEQ L776 PARAM ADDD WSbase TFR D,U TST <$CE BNE L778 CMPD <$40 BCC err56 too big! LDD fieldsiz CMPD 2,U BLO L780 LDD 2,U STD fieldsiz reset fieldwidth L780 LDU ,U BRA L778 L772 ADDD WSbase L770 TFR D,U L778 CLRA PULS PC,d err56 LDB #$38 LBRA L356 BCPCNST LEAU ,X+ BRA BtoI BCPVAR LDD ,X++ ADDD WSbase TFR D,U BtoI LDB ,U CLRA LEAY -6,Y STD 1,Y LDA #1 STA ,Y RTS ICPCNST LEAU ,X++ BRA INTCPY ICPVAR LDD ,X++ ADDD WSbase TFR D,U INTCPY LDD ,U LEAY -6,Y STD 1,Y LDA #1 STA ,Y RTS NEGint clrd SUBD 1,Y STD 1,Y RTS INTADD LDD 7,Y ADDD 1,Y LEAY 6,Y STD 1,Y RTS INTSUB LDD 7,Y SUBD 1,Y LEAY 6,Y STD 1,Y RTS INTMUL LDD 7,Y BEQ L786 muld 1,y stw 7,y L786 LEAY 6,Y RTS INTDIV clre ldd 1,y bne L801 LDB #$2D error 45 LBRA L356 L801 cmpd #1 beq L803 bpl L800 come negd std 1,y L800 cmpd #2 bne L810 LDD 7,Y divide by 2 BEQ L803 bpl L802 negd come L802 ste ,y clrw asrd rolw BRA L806 L810 ldd 7,y bne L812 L803 clrd always 0 STD 9,Y LEAY 6,Y RTS L812 bpl L814 come negd L814 ste ,y tfr d,w clrd divq 1,y exg d,w L806 tst ,y bpl L820 answer = pos. negd comw incw L820 STQ 7,Y L822 LEAY 6,Y RTS RCPCNST LEAY -6,Y LDB ,X+ LDA #2 STD ,Y LDQ ,X STQ 2,Y leax 4,x RTS L2102 LDD ,X++ ADDD WSbase TFR D,U RCPVAR LEAY -6,Y LDA #2 LDB ,U STD ,Y LDQ 1,U STQ 2,Y RTS * invert sign of real number NEGrl fcb $62,1,$25 * eim #1,5,y rts RLSUB fcb $62,1,$25 * eim #1,5,y RLADD TST 2,Y BEQ L824 = +0 TST 8,Y BNE L826 L830 LDQ 1,Y = 0+x STQ 7,Y LDA 5,Y STA $0B,Y L824 LEAY 6,Y rts * compare exponents L826 LDA 7,Y SUBA 1,Y BVC L828 BPL L830 BRA L824 L828 BMI L832 CMPA #$1F BLE L834 BRA L824 change insignif. L832 CMPA #$E1 BLT L830 change insignif. LDB 1,Y STB 7,Y * calc. sign of answer L834 LDB $0B,Y ANDB #1 STB ,Y EORB 5,Y ANDB #1 STB 1,Y sign of answer * clear original signs * aim #$FE,11,y * aim #$FE,5,y fcb $62,$fe,$2b fcb $62,$fe,$25 * calc. answer TSTA BEQ L836 tfr y,w BPL L838 NEGA addw #6 BSR L840 TST 1,Y BEQ L842 * substract mantissas L848 SUBW 4,Y sbcd 2,Y BCC L844 comd comw addw #1 adcd #0 L846 DEC ,Y BRA L844 L838 BSR L840 STQ 2,Y L836 LDQ 8,Y TST 1,Y BNE L848 * add mantissas L842 ADDW 4,Y adcd 2,Y BCC L844 rord rorw INC 7,Y L844 TSTA BMI L850 andcc #^Carry clear carry L854 DEC 7,Y shift to proper form BVS equ0 rolw rold BPL L854 L850 addw #1 adcd #0 BCC L856 RORA INC 7,Y L856 STD 8,Y TFR W,D lsrb lslb orb ,y add sign L858 STD $0A,Y LEAY 6,Y rts L840 SUBA #$10 BCS L860 SUBA #8 BCS L862 PSHS A CLRA LDB 2,W BRA L864 L862 ADDA #8 PSHS A LDD 2,W L864 clrw TST ,S BEQ L866 exg d,w BRA L872 L860 ADDA #8 BCC L870 PSHS A CLRA LDB 2,W LDW 3,W TST ,S BNE L872 BRA L866 L870 ADDA #8 PSHS A LDQ 2,W L872 lsrd rorw DEC ,S BNE L872 L866 LEAS 1,S RTS RLMUL LDA 2,Y BPL equ0 LDA 8,Y BMI L876 equ0 clrd clrw STQ 7,Y STA $0B,Y LEAY 6,Y rts L876 LDA 1,Y ADDA 7,Y BVC L878 L916 BPL equ0 LDB #$32 error 50 lbra L356 L878 STA 7,Y LDB $0B,Y EORB 5,Y ANDB #1 STB ,Y LDA $0B,Y ANDA #$FE STA $0B,Y LDB 5,Y ANDB #$FE STB 5,Y MUL clrw clr extnum tfr a,f LDA $0B,Y LDB 4,Y MUL addr d,w BCC L880 inc extnum L880 LDA $0A,Y LDB 5,Y MUL addr d,w BCC L882 inc extnum L882 tfr e,f lde extnum clr extnum LDA $0B,Y LDB 3,Y MUL addr d,w BCC L884 inc extnum L884 LDA $0A,Y LDB 4,Y MUL addr d,w BCC L886 inc extnum L886 LDA 9,Y LDB 5,Y MUL addr d,w BCC L888 inc extnum L888 tfr e,f lde extnum clr extnum LDA $0B,Y LDB 2,Y MUL addr d,w BCC L890 inc extnum L890 LDA $0A,Y LDB 3,Y MUL addr d,w BCC L892 inc extnum L892 LDA 9,Y LDB 4,Y MUL addr d,w BCC L894 inc extnum L894 LDA 8,Y LDB 5,Y MUL addr d,w BCC L896 inc extnum L896 stf 11,y tfr e,f lde extnum clr extnum LDA $0A,Y LDB 2,Y MUL addr d,w BCC L898 inc extnum L898 LDA 9,Y LDB 3,Y MUL addr d,w BCC L900 inc extnum L900 LDA 8,Y LDB 4,Y MUL addr d,w BCC L902 inc extnum L902 stf 10,y tfr e,f lde extnum clr extnum LDA 9,Y LDB 2,Y MUL addr d,w BCC L904 inc extnum L904 LDA 8,Y LDB 3,Y MUL addr d,w BCC L906 inc extnum L906 LDA 8,Y LDB 2,Y MUL tfr w,u tfr e,f lde extnum exg d,u addr u,w BMI L908 asl 11,y rol 10,y rolb rolw DEC 7,Y LBVS L916 L908 tfr b,a LDB $0A,Y exg d,w ADDW #1 adcd #0 BNE L914 rora INC 7,Y L914 exg d,w lsrb lslb ORB ,Y STD $0A,Y stw 8,y LEAY 6,Y rts RLDIV TST 2,Y BNE L920 LDB #$2D error 45 lbra L356 L920 TST 8,Y LBEQ equ0 LDA 7,Y SUBA 1,Y LBVS L916 STA 7,Y LDA #$21 LDB 5,Y EORB $0B,Y ANDB #1 STD ,Y ldq 2,y lsrd rorw stq 2,y LDQ 8,Y lsrd rorw CLR $0B,Y L932 SUBW 4,Y sbcd 2,y BEQ L926 BMI L928 L936 ORCC #1 L938 DEC ,Y BEQ L930 ROL $0B,Y ROL $0A,Y ROL 9,Y ROL 8,Y andcc #^Carry rolw rold BCC L932 ADDW 4,Y adcd 2,y BEQ L926 BPL L936 L928 ANDCC #$FE BRA L938 L926 tstw BNE L936 LDB ,Y DECB SUBB #$10 BLT L940 SUBB #8 BLT L942 STB ,Y LDA $0B,Y LDB #$80 andcc #^Carry BRA L946 L942 ADDB #8 STB ,Y LDW #$8000 LDD $0A,Y andcc #^Carry BRA L946 L940 ADDB #8 BLT L948 STB ,Y LDQ 9,Y LDF #$80 andcc #^Carry BRA L946 L948 ADDB #7 STB ,Y LDQ 8,Y ORCC #1 L950 rolw rold L946 DEC ,Y BPL L950 TSTA BRA L952 L930 LDQ 8,Y L952 BMI L954 rolw rold DEC 7,Y LBVS equ0 L954 addw #1 adcd #0 BCC L956 RORA INC 7,Y LBVS equ0 L956 STD 8,Y TFR W,D lsrb lslb ORB 1,Y STD $0A,Y INC 7,Y LBVS L916 L958 LEAY 6,Y rts POWERS LDD 7,Y BEQ L958 LDW 1,Y BNE L960 LEAY 6,Y L1152 LDD #$0180 clrw STQ 1,Y ste 5,y rts L960 STD 1,Y STW 7,Y LDD 9,Y LDW 3,Y STD 3,Y STW 9,Y LDA $0B,Y LDB 5,Y STA 5,Y STB $0B,Y LBSR LOG = ln LBSR RLMUL LBRA EXP BlCPVAR LDD ,X++ ADDD WSbase TFR D,U L13 LDB ,U CLRA LEAY -6,Y STD 1,Y LDA #3 STA ,Y RTS LANDB LDB 8,Y ANDB 2,Y BRA L968 LORB LDB 8,Y ORB 2,Y BRA L968 LXORB LDB 8,Y EORB 2,Y L968 LEAY 6,Y STD 1,Y RTS LNOTB COM 2,Y RTS StrCMP PSHS Y,X LDX 1,Y LDY 7,Y STY exprSP L972 LDA ,Y+ CMPA ,X+ BNE L970 CMPA #$FF BNE L972 L970 INCA INC -1,X CMPA -1,X PULS PC,Y,X Slo BSR StrCMP BLO L976 BRA L978 Sle BSR StrCMP BLS L976 BRA L978 Seq BSR StrCMP BEQ L976 BRA L978 Sne BSR StrCMP BNE L976 BRA L978 Sge BSR StrCMP BHS L976 BRA L978 Sgt BSR StrCMP BHI L976 BRA L978 Ilo LDD 7,Y SUBD 1,Y BLT L976 BRA L978 Ile LDD 7,Y SUBD 1,Y BLE L976 BRA L978 Ine LDD 7,Y SUBD 1,Y BNE L976 BRA L978 Ieq LDD 7,Y SUBD 1,Y BEQ L976 BRA L978 Ige LDD 7,Y SUBD 1,Y BGE L976 BRA L978 Igt LDD 7,Y SUBD 1,Y BLE L978 L976 LDB #$FF BRA L980 L978 clrb L980 CLRA LEAY 6,Y STD 1,Y LDA #3 STA ,Y RTS Beq LDB 8,Y CMPB 2,Y BEQ L976 BRA L978 Bne LDB 8,Y CMPB 2,Y BNE L976 BRA L978 Rlo BSR RLCMP BLO L976 BRA L978 Rle BSR RLCMP BLS L976 BRA L978 Rne BSR RLCMP BNE L976 BRA L978 Req BSR RLCMP BEQ L976 BRA L978 Rge BSR RLCMP BHS L976 BRA L978 Rgt BSR RLCMP BHI L976 BRA L978 RLCMP PSHS Y LDA $0B,Y Get sign of 2nd # ANDA #1 ldb 5,y Get sign of 1st # andb #1 cmpr a,b Same sign? bne L996 No, skip ahead L988 LEAU 6,Y signs are the same tsta BEQ L994 positive numbers EXG U,Y invert them L994 LDQ 1,U CMPD 1,Y bne L993 CMPW 3,Y BNE L996 LDA 5,U CMPA 5,Y L996 PULS PC,Y L993 pshs cc eora 1,y bpl L992 no/both fractions tstb beq L992 n1 = 0 tst 2,y beq L992 n2 = 0 * eim #1,0,s fcb $65,1,$60 L992 puls pc,y,cc * copy string SCPCNST CLRB LDU exprSP LEAY -6,Y STU 1,Y starting address STY SStop L1004 cmpr y,u BCC err47 LDA ,X+ STA ,U+ CMPA #$FF BEQ L1001 INCB BNE L1004 LDA #$FF STA ,U+ L1001 clra std 3,y size of string L1002 STU exprSP LDA #4 STA ,Y type: string RTS err47 LDB #$2F LBRA L356 L14 tfr u,d ldw fieldsiz bra L1007 * copy string to expression stack SCPVAR LDD ,X++ ADDD vectorba TFR D,U array vector LDQ ,U address,size target ADDD WSbase stw fieldsiz L1007 ldu exprSP leay -6,y stu 1,y starting address sty SStop cmpd BUPaddr beq L1009 addr w,u cmpr y,u bhs err47 too big ldu 1,y pshs x tfr d,x origin stx BUPaddr L1003 lda ,x+ sta ,u+ cmpa #$FF beq L1005 decw bne L1003 lda #$FF sta ,u+ L1005 comw negate left-over incw addw fieldsiz stw 3,y size of string stw BUPsize puls x bra L1002 L1009 ldw BUPsize stw 3,y tfm d+,u+ lda #$FF sta ,u+ bra L1002 STRconc LDU 1,Y ldw 3,y incw tfr u,d decd tfm u+,d+ STD exprSP ldd 3,y leay 6,y addd 3,y std 3,y length new string RTS L15 LDD fieldsiz LEAY -6,Y STD 3,Y STU 1,Y LDA #5 STA ,Y RTS FLOAT clrd STD 4,Y LDD 1,Y BNE L1012 STB 3,Y LDA #2 STA ,Y RTS L1012 LDW #$0210 TSTA BPL L1014 negd INC 5,Y L1014 TSTA BNE L1016 LDW #$0208 EXG A,B L1016 TSTA BMI L1018 L1020 decw asld BPL L1020 L1018 STD 2,Y STW ,Y RTS float2 LEAY 6,Y BSR FLOAT LEAY -6,Y RTS FIX ldw 1,y ldd 4,y tste BGT L1024 BMI L1026 tstf BPL L1026 LDW #1 BRA L1028 L1026 clrw BRA L1030 L1024 SUBE #$10 BHI err52 BNE L1034 LDW 2,Y rorb BCC L1030 CMPW #$8000 BNE err52 tsta BPL L1030 BRA err52 L1034 pshs b tfr e,b ldw 2,y cmpb #$F8 BHI L1036 tfr f,a tfr e,f clre ADDB #8 BEQ L1038 L1036 lsrw rora INCB BNE L1036 L1038 puls b tsta BPL L1028 incw BVC L1028 err52 LDB #$34 LBRA L356 L1028 RORB BCC L1030 comw incw L1030 STW 1,Y std 4,y LDA #1 STA ,Y RTS fixN1 LEAY 6,Y BSR FIX LEAY -6,Y RTS fixN2 LEAY $0C,Y BSR FIX LEAY -$0C,Y RTS ABSrl fcb $62,$fe,$25 * AIM #$FE,5,y RTS ABSint LDD 1,Y BPL L1042 NEGD STD 1,Y L1042 RTS PEEK CLRA LDB [1,Y] STD 1,Y RTS SGNrl LDA 2,Y BEQ L1044 LDA 5,Y ANDA #1 BNE L1046 L1050 LDB #1 BRA L1048 SGNint LDD 1,Y BMI L1046 BNE L1050 L1044 CLRB BRA L1048 L1046 LDB #$FF L1048 SEX BRA L1052 ERR LDB errcode CLR errcode L1054 CLRA LEAY -6,Y L1052 STD 1,Y LDA #1 STA ,Y L1058 RTS POS LDB charcoun BRA L1054 SQRT LDB 5,Y ASRB LBCS err67 LDB #$1F STB <$6E LDD 1,Y BEQ L1058 INCA ASRA STA 1,Y LDQ 2,Y BCS L1060 lsrd rorw L1060 STQ -4,Y clrd clrw STQ 2,Y STQ -8,Y BRA L1064 L1070 ORCC #1 ldq 2,y rolw rold DEC <$6E BEQ L1066 stq 2,y BSR L1068 L1064 LDB -4,Y SUBB #$40 STB -4,Y LDD -6,Y sbcd 4,Y STD -6,Y LDD -8,Y sbcd 2,Y STD -8,Y BPL L1070 L1072 ANDCC #$FE ldq 2,y rolw rold DEC <$6E BEQ L1066 stq 2,y BSR L1068 LDB -4,Y ADDB #$C0 STB -4,Y LDD -6,Y adcd 4,Y STD -6,Y LDD -8,Y adcd 2,Y STD -8,Y BMI L1072 BRA L1070 L1066 andcc #^Carry BRA L1074 L1076 DEC 1,Y LBVS equ0 L1074 rolw rold BPL L1076 STQ 2,Y RTS L1068 ldq -8,y ASL -1,Y ROL -2,Y ROL -3,Y ROL -4,Y rolw rold asl -1,y rol -2,y rol -3,y rol -4,y rolw rold stq -8,y RTS MODint LBSR INTDIV LDD 3,Y STD 1,Y RTS MODrl LEAU -$0C,Y ldw #12 tfm y+,u+ LEAY -$0C,U LBSR RLDIV BSR INTrl LBSR RLMUL LBRA RLSUB INTrl LDA 1,Y BGT L1090 clrd clrw STQ 1,Y STB 5,Y L1092 RTS L1090 CMPA #$1F BCC L1092 LEAU 6,Y LDB -1,U ANDB #1 PSHS U,B LEAU 1,Y L1094 LEAU 1,U SUBA #8 BCC L1094 BEQ L1096 LDB #$FF L1098 ASLB INCA BNE L1098 ANDB ,U STB ,U+ BRA L1100 L1096 LEAU 1,U L1102 STA ,U+ L1100 CMPU 1,S BNE L1102 PULS U,B ORB 5,Y STB 5,Y RTS SQint LEAY -6,Y If embedding, skip LEAY -6,y LDD 7,Y Get # to square STD 1,Y Multiply it by itself (could embed MULD) LBRA INTMUL SQrl LEAY -6,Y LDQ 8,Y STQ 2,Y LDD 6,Y STD ,Y LBRA RLMUL VAL LDD Sstack LDU Spointer PSHS U,D LDD 1,Y STD Sstack STD Spointer STD exprSP LEAY 6,Y LBSR L2008 PULS U,D STD Sstack STU Spointer LBCS err67 RTS ADDR LBSR L724 LEAY -6,Y STU 1,Y L1112 LDA #1 STA ,Y LEAX 1,X RTS * Table of var type sizes L1108 fcb 1,2,5,1 SIZE LBSR L724 leay -6,y CMPA #4 BCC L1106 LEAU <L1108,PC LDB A,U CLRA BRA L1110 L1106 LDD fieldsiz L1110 STD 1,Y BRA L1112 equTRUE LDD #$FF BRA L1114 equFALSE clrd L1114 LEAY -6,Y STD 1,Y LDA #3 STA ,Y RTS LNOTI COM 1,Y COM 2,Y RTS LANDI LDD 1,Y ANDD 7,Y BRA L1116 LXORI LDD 1,Y EORD 7,Y BRA L1116 LORI LDD 1,Y ORD 7,Y L1116 STD 7,Y LEAY 6,Y RTS L1118 fcb 255,222,91,216,170 LOG10 BSR LOG LEAU <L1118,PC LBSR RCPVAR LBRA RLMUL LOG PSHS X LDB 5,Y ASRB LBCS err67 LDD 1,Y LBEQ err67 PSHS A LDB #1 STB 1,Y LEAY <-$1A,Y LEAX <$1B,Y LEAU ,Y LBSR cprXU LBSR L1124 clrd clrw STQ <$14,Y STA <$18,Y LEAX L1126,PC STX <$19,Y LBSR L1128 LEAX <$14,Y LEAU <$1B,Y LBSR cprXU LBSR L1130 LEAY <$1A,Y LDB #2 STB ,Y * oim #1,5,y fcb $61,1,$25 PULS B BSR L1132 PULS X LBRA RLADD L1138 fcb 0,177,114,23,248 L1132 SEX BPL L1136 NEGB L1136 ANDA #1 PSHS D LEAU <L1138,PC LBSR RCPVAR LDB 5,Y LDA 1,S CMPA #1 BEQ L1140 MUL STB 5,Y LDB 4,Y STA 4,Y LDA 1,S MUL ADDB 4,Y ADCA #0 STB 4,Y LDB 3,Y STA 3,Y LDA 1,S MUL ADDB 3,Y ADCA #0 STB 3,Y LDB 2,Y STA 2,Y LDA 1,S MUL ADDB 2,Y ADCA #0 BEQ L1142 ldw 3,y L1144 INC 1,Y lsrd rorw ROR 5,Y TSTA BNE L1144 stw 3,y L1142 STB 2,Y LDB 5,Y L1140 ANDB #$FE ORB ,S STB 5,Y PULS PC,D EXP PSHS X LDB 1,Y BEQ L1146 CMPB #7 BLE L1148 LDB 5,Y RORB RORB EORB #$80 LBRA L1150 L1148 CMPB #$E4 LBLE L1152 TSTB BPL L1154 L1146 CLR ,-S LDB 5,Y ANDB #1 BEQ L1156 BRA L1158 L1154 LDA #$71 MUL ADDA 1,Y LDB 5,Y ANDB #1 PSHS B,A EORB 5,Y STB 5,Y LDB ,S L1162 LBSR L1132 LBSR RLSUB LDB 1,Y BLE L1160 ADDB ,S STB ,S LDB 1,Y BRA L1162 L1160 PULS D PSHS A TSTB BEQ L1156 NEGA STA ,S ORB 5,Y STB 5,Y L1158 LEAU L1138,PC LBSR RCPVAR LBSR RLADD DEC ,S LDB 5,Y ANDB #1 BNE L1158 L1156 LEAY <-$1A,Y LEAX <$1B,Y LEAU <$14,Y LBSR cprXU LBSR L1124 LDD #$1000 clrw STQ ,Y STB 4,Y LEAX L1164,PC STX <$19,Y BSR L1128 LEAX ,Y LEAU <$1B,Y LBSR cprXU LBSR L1130 LEAY <$1A,Y PULS B ADDB 1,Y BVS L1150 LDA #2 STD ,Y PULS PC,X L1128 LDA #1 STA <$9A LEAX L1166,PC STX <$95 LEAX <$5F,X STX <$97 LBRA L1168 L1150 LEAY -6,Y puls x lbra L916 0 or ovf L2125 PSHS X BSR L1170 LDD 1,Y LBEQ L1172 CMPD #$0180 BGT L1174 error 67 BNE L1176 LDD 3,Y BNE L1174 error 67 LDA 5,Y LBEQ L1178 L1174 LBRA err67 L1176 LBSR L1180 LEAY <-$14,Y LEAX <$15,Y LEAU ,Y LBSR cprXU LBSR L1124 LEAX <$1B,Y LBRA L1182 L1170 LDB 5,Y ANDB #1 STB <$6D EORB 5,Y STB 5,Y RTS L2126 LEAU <L1184,PC PSHS U,X BSR L1170 LDD 1,Y LBEQ L1178 CMPD #$0180 BGT L1174 error 67 BNE L1186 LDD 3,Y BNE L1174 error 67 LDA 5,Y BNE L1174 error 67 LDA <$6D BNE L1188 CLRB STD 1,Y PULS PC,U,X L1188 LEAY 6,Y PULS U,X LBRA PI L1186 BSR L1180 LEAY <-$14,Y LEAX <$1B,Y LEAU ,Y LBSR cprXU LBSR L1124 LEAX <$15,Y LBRA L1182 L1184 LDA 5,Y BITA #1 BEQ L1192 LDU WSbase TST 1,U BEQ L1194 LEAU <L1196,PC LBSR RCPVAR BRA L1198 L1194 LBSR PI L1198 LBRA RLADD L1192 RTS L1196 fcb 8,180,0,0,0 L1180 LDA <$6D PSHS A LEAY -18,Y LDD #$0201 STD $0C,Y LDA #$80 CLRB STD $0E,Y CLRA STD $10,Y LDQ <$12,Y STQ ,Y STQ 6,Y LDD <$16,Y STD 4,Y STD $0A,Y LBSR RLMUL LBSR RLSUB LBSR SQRT PULS A STA <$6D RTS L2127 PSHS X LBSR L1170 LDB 1,Y CMPB #$18 BLT L1204 L1178 LEAY 6,Y LBSR PI DEC 1,Y BRA L1206 L1204 LEAY <-$1A,Y LDD #$1000 clrw STQ ,Y STB 4,Y lda ,y LDB <$1B,Y ldw 1,y BRA L1208 L1210 ASRA rorw ROR 3,Y ROR 4,Y DECB L1208 CMPB #2 BGT L1210 sta ,y stw 1,y STB <$1B,Y LEAX <$1B,Y L1182 LEAU $0A,Y LBSR cprXU LBSR L1124 clrd clrw STQ <$14,Y STA <$18,Y LEAX L1212,PC STX <$19,Y LBSR L1214 LEAX <$14,Y LEAU <$1B,Y LBSR cprXU LBSR L1130 LEAY <$1A,Y L1206 LDA 5,Y ORA <$6D STA 5,Y LDU WSbase TST 1,U BEQ L1172 LEAU L1216,PC LBSR RCPVAR LBSR RLMUL BRA L1172 L2122 PSHS X LBSR L1218 LEAX $0A,Y BSR L1220 LDA 5,Y L1230 EORA <$9C L1224 STA 5,Y L1172 LDA #2 STA ,Y PULS PC,X L1220 LEAU <$1B,Y LBSR cprXU LBSR L1130 LEAY <$14,Y LEAX L1222,PC LEAU 1,Y LBSR cprXU LBRA RLMUL L2123 PSHS X BSR L1218 LEAX ,Y BSR L1220 LDA 5,Y EORA <$9B BRA L1224 L2124 PSHS X BSR L1218 LEAX $0A,Y LEAU <$1B,Y LBSR cprXU LBSR L1130 LEAX ,Y LEAY <$14,Y LEAU 1,Y LBSR cprXU LBSR L1130 LDD 1,Y BNE L1226 LEAY 6,Y LDD #$7FFF L1232 STD 1,Y LDA #$FF STD 3,Y DECA BRA L1228 L1226 LBSR RLDIV LDA 5,Y L1228 EORA <$9B BRA L1230 L1231 fcb 2,201,15,218,162 L1238 fcb 251,142,250,53,18 L1216 fcb 6,229,46,224,212 PI LEAU <L1231,PC LBRA RCPVAR L1218 LDU WSbase TST 1,U BEQ L1236 radians LEAU <L1238,PC LBSR RCPVAR LBSR RLMUL -> degrees L1236 CLR <$9B LDB 5,Y ANDB #1 STB <$9C EORB 5,Y STB 5,Y BSR PI INC 1,Y LBSR RLCMP BLT L1240 LBSR MODrl BSR PI BRA L1244 L1240 DEC 1,Y L1244 LBSR RLCMP BLT L1246 INC <$9B * eim #1,$9C fcb 5,1,$9c LBSR RLSUB BSR PI L1246 DEC 1,Y LBSR RLCMP BLE L1248 * eim #1,$9B fcb 5,1,$9c INC 1,Y * oim #1,11,y fcb $61,1,$2b LBSR RLADD LEAY -6,Y L1248 LEAY -$14,Y LEAX L1250,PC STX <$19,Y LEAX <$1B,Y LEAU <$14,Y BSR cprXU LBSR L1124 LDD #$1000 clrw STQ ,Y CLRA STA 4,Y STQ $0A,Y STA $0E,Y L1214 LEAX L1252,PC STX <$95 LEAX <$41,X STX <$97 CLR <$9A L1168 LDB #$25 STB <$99 CLR <$9D L1264 LEAU <$1B,Y LDX <$95 CMPX <$97 BCC L1254 BSR cprXU LEAX 5,X STX <$95 BRA L1256 L1254 ldq ,u asrd rorw stq ,u ror 4,u L1256 LEAX ,Y LEAU 5,Y BSR L1260 TST <$9A BNE L1262 LEAX $0A,Y LEAU $0F,Y BSR L1260 L1262 JSR [$19,Y] INC <$9D DEC <$99 BNE L1264 RTS cprXU LDQ 1,X STQ 1,U LDA ,X STA ,U rts L1260 LDB ,X SEX LDB <$9D LSRB LSRB LSRB BCC L1266 INCB L1266 PSHS B BEQ L1268 L1270 STA ,U+ DECB BNE L1270 L1268 LDB #5 SUBB ,S+ BEQ L1272 L1274 LDA ,X+ STA ,U+ DECB BNE L1274 L1272 LEAU -5,U LDB <$9D ANDB #7 BEQ L1276 ldw 1,u CMPB #4 BCS L1258 SUBB #8 LDA ,X L1278 ASLA ROL 4,U ROL 3,U rolw ROL ,U INCB BNE L1278 stw 1,u RTS L1258 ASR ,U rorw ROR 3,U ROR 4,U DECB BNE L1258 stw 1,u L1276 RTS L1212 LDA $0A,Y EORA ,Y COMA BRA L1280 L1250 LDA <$14,Y L1280 TSTA BPL L1282 LEAX ,Y LEAU $0F,Y BSR L1284 LEAX $0A,Y LEAU 5,Y BSR L1286 LEAX <$14,Y LEAU <$1B,Y BRA L1284 L1282 LEAX ,Y LEAU $0F,Y BSR L1286 LEAX $0A,Y LEAU 5,Y BSR L1284 LEAX <$14,Y LEAU <$1B,Y BRA L1286 L1164 LEAX <$14,Y LEAU <$1B,Y BSR L1286 BMI L1284 BNE L1288 LDD 1,X BNE L1288 LDD 3,X BNE L1288 LDB #1 STB <$99 L1288 LEAX ,Y LEAU 5,Y BRA L1284 L1126 LEAX ,Y LEAU 5,Y BSR L1284 CMPA #$20 BCC L1286 LEAX <$14,Y LEAU <$1B,Y L1284 ldq 1,x addw 3,u adcd 1,u STQ 1,X LDA ,X ADCA ,U STA ,X RTS L1286 ldq 1,x subw 3,u sbcd 1,u STQ 1,X LDA ,X SBCA ,U STA ,X RTS L1124 LDB ,U CLR ,U clra ldw 1,u ADDB #4 BGE L1294 NEGB LBRA L1258 L1296 ASL 4,U ROL 3,U rolw rola DECB L1294 BNE L1296 sta ,u stw 1,u RTS L1130 LDA ,U BPL L1298 clrd clrw STQ ,U STA 4,U RTS L1298 ldq ,u beq L1304 pshs x ldx #4 L1302 leax -1,x asl 4,u rolw rold BPL L1302 L1300 std 1,u exg d,w tfr x,w stf ,u puls x addd #1 ANDB #$FE STD 3,U BCC L1304 INC 2,U BNE L1304 INC 1,U BNE L1304 ROR 1,U INC ,U L1304 RTS L1252 fcb 12,144,253,170,34 fcb 7,107,25,193,88 fcb 3,235,110,191,38 fcb 1,253,91,169,171 fcb 0,255,170,221,185 fcb 0,127,245,86,239 fcb 0,63,254,170,183 fcb 0,31,255,213,86 fcb 0,15,255,250,171 fcb 0,7,255,255,85 fcb 0,3,255,255,235 fcb 0,1,255,255,253 fcb 0,1,0,0,0 L1222 fcb 0,155,116,237,168 L1166 fcb 11,23,33,127,126 fcb 6,124,200,251,48 fcb 3,145,254,248,243 fcb 1,226,112,118,227 fcb 0,248,81,134,1 fcb 0,126,10,108,58 fcb 0,63,129,81,98 fcb 0,31,224,42,107 fcb 0,15,248,5,81 fcb 0,7,254,0,170 fcb 0,3,255,128,21 fcb 0,1,255,224,3 fcb 0,0,255,248,0 fcb 0,0,127,254,0 fcb 0,0,63,255,128 fcb 0,0,31,255,224 fcb 0,0,15,255,248 fcb 0,0,7,255,254 fcb 0,0,4,0,0 L1382 fcb 14,18,20,162,187,64 fcb 230,45,54,25,98,233 fcb 0,16,63,0,57 RND clrw STW <$4C clr ,-s LDA 2,Y BEQ L1312 LDB 5,Y BITB #1 BNE L1314 COM ,S BRA L1312 L1314 ADDB #$FE ADDB 1,Y LDA 4,Y STD <$52 LDD 2,Y STD <$50 L1312 LDA <$53 LDB <$57 MUL STD <$4E tfr a,f LDA <$52 LDB <$57 MUL addr d,w BCC L1316 INC <$4C L1316 LDA <$53 LDB <$56 MUL addr d,w BCC L1318 INC <$4C L1318 stw <$4D ldw <$4C LDA <$51 LDB <$57 MUL addr d,w LDA <$52 LDB <$56 MUL addr d,w LDA <$53 LDB <$55 MUL addr d,w LDA <$50 LDB <$57 MUL addr b,e LDA <$51 LDB <$56 MUL addr b,e LDA <$52 LDB <$55 MUL addr b,e LDA <$53 LDB <$54 MUL addr b,e LDD <$4E ADDD <$5A exg d,w adcd <$58 STQ <$50 TST ,S+ BNE L1320 L1326 CLR 1,Y sta 2,y LDA #$1F PSHS A lda 2,y BMI L1322 andcc #^Carry L1324 DEC ,S BEQ L1322 DEC 1,Y rolw rold BPL L1324 L1322 STQ 2,Y * aim #$FE,5,y fcb $62,$fe,$25 PULS PC,B L1320 leay -6,y rorw clr ,y rolw sign now + BSR L1326 LBRA RLMUL LEN LDQ 1,Y STD exprSP L1328 STW 1,Y LDA #1 STA ,Y RTS ASC LDD 1,Y STD exprSP LDF [1,Y] CLRE BRA L1328 CHR$ LDD 1,Y TSTA LBNE err67 LDU exprSP STU 1,Y STB ,U+ LBSR L1366 ldd #1 std 3,y STY SStop cmpr y,u LBCC err47 RTS LEFT$ LDD 1,Y BLE isNull ADDD 7,Y TFR D,U address new end CMPD exprSP BCC L1334 BSR L1336 shorten current string ldd 1,y std 9,y L1334 LEAY 6,Y RTS isNull LEAY 6,Y LDU 1,Y clrd std 3,y BRA L1336 RIGHT$ LDW 1,Y BLE isNull LDD exprSP subr w,d decd new starting address CMPD 7,Y current start address BLS L1338 stw 9,y incw terminate also LDU 7,Y tfm d+,u+ STU exprSP L1338 LEAY 6,Y rts MID$ LDD 1,Y size of piece BLE L1342 LDD 7,Y it's starting offset BGT L1344 L1342 LDD 1,Y = LEFT$ LEAY 6,Y STD 1,Y BRA LEFT$ L1344 decd BEQ L1342 ADDD $0D,Y start address piece CMPD exprSP BCS L1348 piece exists LEAY 6,Y BRA isNull L1348 clrw ldf 2,y LEAY $0C,Y stw 3,y ldu 1,Y tfm d+,u+ bra L1337 TRIM$ LDU exprSP ldw 3,y incw adjust for loop struct. LEAU -1,U L1354 decw BEQ L1336 LDA ,-U CMPA #$20 BEQ L1354 LEAU 1,U L1336 stw 3,y L1337 LDA #$FF STA ,U+ STU exprSP RTS SUBSTR PSHS Y,X LDW exprSP SUBW 1,Y ADDW 7,Y incw LDX 7,Y LDY 1,Y bra L1356 * compare strings * L202 PSHS Y,X L200 LDA ,X+ CMPA #$FF BEQ L198 CMPA ,Y+ BEQ L200 PULS Y,X LEAY 1,Y L1356 CMPR W,Y BLS L202 clrd no match BRA L1360 L198 PULS Y,X TFR Y,D LDX 2,S SUBD 1,X incd starting offset L1360 PULS Y,X LEAY 6,Y STD 1,Y LDA #1 STA ,Y RTS STR$int LDB #2 BRA L1362 STR$rl LDB #3 L1362 LDA charcoun LDU Spointer PSHS U,X,A LBSR L46 BCS err67 LDX 3,S ldu exprSP leay -6,y stu 1,y sty SStop ldw Spointer subr x,w tfr w,d string length addr u,d cmpr y,d lbcc err47 string too long stw 3,y tfm x+,u+ copy to expression stack LDA #$FF STA ,U+ L1361 stu exprSP lda #4 sta ,y PULS U,X,A reset pointers STA charcoun STU Spointer RTS err67 LDB #$43 LBRA L356 TAB LDW 1,Y BLT err67 STY SStop LDU exprSP STU 1,Y ldb charcoun clra subr d,w W = number spaces bhi L1365 clrw L1365 stw 3,y beq L1366 tfr u,d addr w,d cmpr y,d lbcc err47 too big lda #$20 pshs a tfm s,u+ assemble string leas 1,s L1366 LDA #$FF STA ,U+ STU exprSP LDA #4 STA ,Y rts DATE$ PSHS X LEAY -6,Y LEAX -6,Y LDU exprSP STU 1,Y ldd #17 std 3,y os9 F$Time BCS L1371 BSR L1370 LDA #$2F BSR L1372 LDA #$2F BSR L1372 LDA #$20 BSR L1372 LDA #$3A BSR L1372 LDA #$3A BSR L1372 L1371 puls x BRA L1366 L1372 STA ,U+ * byte to ascii L1370 LDA ,X+ LDB #$2F L1374 INCB SUBA #$0A BCC L1374 STB ,U+ LDB #$3A L1376 DECB INCA BNE L1376 STB ,U+ RTS EOF LDA 2,Y LDB #6 os9 I$GetStt BCC L1378 CMPB #$D3 BNE L1378 LDB #$FF BRA L1380 L1378 LDB #0 L1380 CLRA STD 1,Y LDA #3 STA ,Y RTS L46 PSHS PC,X,D ASLB LEAX <L1398,PC LDD B,X LEAX D,X STX 4,S PULS PC,X,D * table L1398 fdb WRITLN-L1398 fdb PRintg-L1398 fdb PRintg-L1398 fdb PRreal-L1398 fdb PRbool-L1398 fdb PRstring-L1398 fdb READLN-L1398 fdb L2006-L1398 fdb L2007-L1398 fdb L2008-L1398 fdb L2009-L1398 fdb L2010-L1398 fdb Strterm-L1398 fdb L2012-L1398 fdb setFP-L1398 fdb err48-L1398 fdb L2015-L1398 fdb PRNTUSIN-L1398 fdb L1632-L1398 fdb L2018-L1398 * L1540 fcb 6,2,39,16,3,232,0,100,0,10 L1490 fcb 4,160,0,0,0 fcb 7,200,0,0,0 fcb 10,250,0,0,0 fcb 14,156,64,0,0 fcb 17,195,80,0,0 fcb 20,244,36,0,0 fcb 24,152,150,128,0 fcb 27,190,188,32,0 fcb 30,238,107,40,0 fcb 34,149,2,249,0 fcb 37,186,67,183,64 fcb 40,232,212,165,16 fcb 44,145,132,231,42 fcb 47,181,230,32,244 fcb 50,227,95,169,50 fcb 54,142,27,201,192 fcb 57,177,162,188,46 fcb 60,222,11,107,58 L1486 fcb 64,138,199,35,4 L1668 fcc /True/ fcb 255 L1672 fcc /False/ fcb 255 AtoITR PSHS U LEAY -6,Y * clear negative,decpoint,digits clrd clrw STQ expneg STA decimals STQ 2,Y STA 1,Y LBSR L1418 check string BCC L1420 LEAX -1,X CMPA #$2C , ?? BNE err59 BRA L1424 L1420 CMPA #$24 hex number? LBEQ L1426 CMPA #$2B + ?? BEQ L1428 CMPA #$2D - ?? BNE L1430 INC negativ L1428 LDA ,X+ L1430 CMPA #$2E . ?? BNE L1432 TST decpoint BNE err59 only one allowed INC decpoint BRA L1428 L1432 LBSR L1434 BCS L1436 not a number PSHS A INC digits LDQ 2,Y bita #$E0 bne L1440 rolw rold STQ 2,Y rolw rold rolw rold ADDW 4,Y adcd 2,Y BCS L1440 ADDF ,S+ BCC L1442 adde #1 BCC L1442 incd BEQ err60 L1442 STQ 2,Y TST decpoint BEQ L1428 INC decimals BRA L1428 L1440 LEAS 1,S err60 LDB #$3C BRA L1448 err59 LDB #$3B L1448 STB errcode COMA PULS PC,U L1436 EORA #$45 = E ANDA #$DF BEQ L1450 exp. number LEAX -1,X TST digits BEQ err59 TST decpoint BNE L1454 real number LDD 2,Y BNE L1454 large number L1424 LDD 4,Y BMI L1454 large number TST negativ BEQ L1456 negd L1456 STD 1,Y integer number L1504 LDA #1 LBRA L1458 * exponential numbers * L1450 LDA ,X CMPA #$2B + ?? BEQ L1460 CMPA #$2D - ?? BNE L1462 INC expneg L1460 LEAX 1,X L1462 LBSR number BCS err59 TFR A,B LBSR number BCC L1466 LEAX -1,X BRA L1468 L1466 PSHS A LDA #$0A MUL D*10 ADDB ,S+ L1468 TST expneg BNE L1470 NEGB L1470 ADDB decimals STB decimals * real numbers * L1454 LDB #$20 STB 1,Y LDQ 2,Y BNE L1472 refers to regs.d tstw bne L1472 STA 1,Y zero!! BRA L1474 L1472 TSTA BMI L1476 andcc #^Carry L1478 DEC 1,Y rolw rold BPL L1478 stq 2,y L1476 CLR expneg LDB decimals BEQ L1480 whole number BPL L1482 NEGB INC expneg L1482 CMPB #$13 BLS L1484 SUBB #$13 PSHS B LEAU L1486,PCR BSR L1488 PULS B LBCS err60 L1484 DECB LDA #5 MUL LEAU L1490,PCR LEAU B,U BSR L1488 LBCS err60 L1480 LDA 5,Y add sign ANDA #$FE ORA negativ STA 5,Y L1474 LDA #2 real number L1458 STA ,Y ANDCC #$FE PULS PC,U L1488 LEAY -6,Y LDQ ,U STQ 1,Y LDB 4,U STB 5,Y LDA expneg LBEQ RLDIV LBRA RLMUL * convert hex to decimal * L1426 LBSR number BCC L1496 0-9 anda #$DF CMPA #$41 A ?? BCS L1500 CMPA #$46 F ?? BHI L1500 SUBA #$37 conversion L1496 INC digits tfr a,e ldd 1,y bita #$F0 lbne err60 asld asld asld asld addr e,b std 1,y BRA L1426 L1500 LEAX -1,X TST digits LBEQ err59 LBRA L1504 * ----------------- * L2008 PSHS X LDX Spointer LBSR AtoITR BCC L1508 L1518 PULS PC,X L1508 CMPA #2 BEQ L1510 LBSR FLOAT L1510 LBSR L1514 BCS L1516 LDB #$3D error 61 STB errcode COMA PULS PC,X L1516 STX Spointer CLRA PULS PC,X L2006 PSHS X LDX Spointer LBSR AtoITR BCS L1518 CMPA #1 BNE err58 TST 1,Y BEQ L1510 BRA err58 L2007 PSHS X LDX Spointer LBSR AtoITR BCS L1518 CMPA #1 BEQ L1510 err58 LDB #$3A STB errcode COMA PULS PC,X * verify string * L2010 PSHS U,X LEAY -6,Y LDU exprBase STU 1,Y LDA #4 STA ,Y clrb LDX Spointer L1526 LDA ,X+ BSR L1522 BCS L1524 STA ,U+ incb BRA L1526 L1524 STX Spointer LDA #$FF STA ,U+ STU exprSP CLRA std 3,y PULS PC,U,X * Boolean -> internal repr. * L2009 PSHS X LEAY -6,Y LDA #3 STA ,Y CLR 2,Y LDX Spointer BSR L1418 BCS L1528 leax 3,x anda #$DF CMPA #$54 = T(rue) BEQ L1530 leax 1,x EORA #$46 = F(alse) BEQ L1532 bra err58 L1530 COM 2,Y L1532 BSR L1418 L1528 STX Spointer CLRA PULS PC,X * validate characters * L1514 LDA ,X+ CMPA #$20 = space? BNE L1522 BSR L1418 BCC L1534 BRA L1536 L1418 LDA ,X+ CMPA #$20 = space? BEQ L1418 skip them L1522 CMPA <$DD BEQ L1536 CMPA #$0D = CR? BEQ L1534 CMPA #$FF = end of string? BEQ L1534 ANDCC #$FE RTS L1534 LEAX -1,X L1536 ORCC #1 RTS * integer to ASCII * ItoA PSHS U,X clrw STE digits STE negativ LDA #4 STA <$7E LDD 1,Y BPL L1538 negd INC negativ L1538 LEAU L1540,PC L1552 clrf LEAU 2,U L1544 SUBD ,U BCS L1542 incf BRA L1544 L1542 ADDD ,U tstw BEQ L1548 L1546 ince addf #$30 convert to ASCII stf ,x+ inc digits L1548 DEC <$7E BNE L1552 orb #$30 convert to ASCII stb ,x inc digits LEAY 6,Y PULS PC,U,X * real to ASCII * RtoA PSHS U,X clrw stw expneg + digits stw negativ + decimals stw <$7B LEAU ,X ldb #$30 ASCII 0 pshs b ldw #10 Fill buffer with 10 of them tfm s,u+ leas 1,s LDD 1,Y BNE L1556 INCA LBRA L1558 L1556 LDB 5,Y BITB #1 BEQ L1560 STB negativ ANDB #$FE STB 5,Y L1560 LDD 1,Y BPL L1562 INC expneg NEGA L1562 CMPA #3 BLS L1564 LDB #$9A MUL LSRA TFR A,B TST expneg BEQ L1566 NEGB L1566 STB decimals CMPA #$13 BLS L1568 PSHS A LEAU L1486,PC LBSR L1488 PULS A SUBA #$13 L1568 LEAU L1490,PC DECA LDB #5 MUL LEAU D,U LBSR L1488 L1564 LDQ 2,Y TST 1,Y BEQ L1580 BPL L1572 L1574 lsrd rorw ROR <$7C INC 1,Y BNE L1574 BRA L1580 L1572 andcc #^Carry rolw rold ROL <$7B DEC 1,Y BNE L1572 STA 2,Y INC decimals LDA <$7B BSR L1550 LDA 2,Y L1580 CLR <$7B rolw rold rol <$7B STQ 2,Y LDA <$7B STA <$7C lda 2,y rolw rold ROL <$7B rolw rold ROL <$7B ADDW 4,Y adcd 2,Y PSHS A LDA <$7B ADCA <$7C BSR L1550 LDA digits CMPA #9 PULS A BEQ L1578 tstd BNE L1580 tstw BNE L1580 L1578 STA ,Y LDA digits CMPA #9 BCS L1582 LDB ,Y BPL L1582 L1584 LDA ,-X INCA STA ,X CMPA #$39 = 9? BLS L1582 LDA #$30 =0 STA ,X CMPX ,S BNE L1584 INC ,X INC decimals L1582 LDA #9 L1558 STA digits LEAY 6,Y PULS PC,U,X L1550 ORA #$30 to ASCII STA ,X+ INC digits RTS READLN PSHS Y,X LDX Sstack STX Spointer LDA #1 STA charcoun LDY #$0100 LDA IOpath os9 I$ReadLn BRA L1586 WRITLN PSHS Y,X LDX Sstack LDY Spointer subr x,y beq L1588 STX Spointer LDA IOpath os9 I$WritLn L1586 BCC L1588 STB errcode L1588 PULS PC,Y,X setFP PSHS U,X LDD ,Y type of filepointer CMPA #2 BEQ L1590 real LDU 1,Y integer BRA L1592 L1590 tstb If exponent is <=0, Seek to 0 BGT L1594 Positive value, go calculate longint for SEEK LDU #0 seek #0 L1592 LDX #0 BRA L1596 L1594 SUBB #$20 Only up to 2^32 allowed BCS L1597 Good, continue LDB #$4E error 78 (seek error) COMA BRA L1600 L1597 lda #$FF Force Value to -1 to -32 tfr d,x Move into X for counter ldq 2,y Get mantissa L1598 lsrd Calculate to power of exponent rorw leax 1,x Do until done BNE L1598 tfr d,x Move 32 bit result to proper regs for SEEK tfr w,u L1596 LDA IOpath Do the seek os9 I$Seek BCC L1602 L1600 STB errcode L1602 PULS PC,U,X * print real numbers * PRreal PSHS U,X LEAS -10,S LEAX ,S LBSR RtoA PSHS X LDA #9 LEAX 9,X L1608 LDB ,-X CMPB #$30 BNE L1606 DECA CMPA #1 BNE L1608 skip 0s L1606 STA digits PULS X LDB decimals BGT L1610 NEGB TFR B,A CMPB #9 BHI L1612 ADDB digits CMPB #9 BHI L1612 * 0 < x < 1 * PSHS A LBSR L1614 CLRA LBSR L1616 PULS B TSTB BEQ L1618 LBSR L1620 L1618 LDA digits BRA L1622 * real number * L1610 CMPB #9 BHI L1612 LBSR L1614 TFR B,A BSR L1624 LBSR L1616 LDA digits SUBA decimals BLS L1626 L1622 BSR L1624 L1626 LEAS 10,S CLRA PULS PC,U,X * exponential number * L1612 LBSR L1614 LDA #1 BSR L1624 BSR L1616 LDA digits DECA BNE L1628 INCA L1628 BSR L1624 BSR L1630 BRA L1626 * exponent * L1630 LDE #$45 = E LDA decimals DECA PSHS A BPL L1634 NEG ,S ldf #$2D = - BRA L1638 L1634 ldf #$2B = + L1638 PULS B CLRA L1644 SUBB #$0A BCS L1642 INCA BRA L1644 L1642 ADDB #$0A exp. in D addd #$3030 -> ASCII pshs d pshsw exp. on stack ldb #4 bsr L1650 cmpw #4 space left to print it? beq L1646 leas 4,s no, clean up stack rts L1646 tfm s+,d+ std Spointer rts * L1624 TFR A,B L1625 TSTB BEQ L1648 bsr L1650 tfm x+,d+ L1649 std Spointer L1648 RTS * L1650 tfr s,w subw #64 subw Spointer w holds max. length clra cmpr w,d bhs L1651 too long: truncate tfr d,w L1651 ldb charcoun addr f,b update counter stb charcoun ldd Spointer destination rts * ---------------- * L1660 LDA #$20 = space BRA L1632 L1616 LDA #$2E = . L1632 PSHS U,A LEAU <-$40,S CMPU Spointer BHI L1652 space left!! CMPA #$0D CR ?? BEQ L1652 LDA #47 error 47 STA errcode coma BRA L1654 L1652 LDU Spointer STA ,U+ STU Spointer INC charcoun L1654 PULS PC,U,A * spacing LDA #$20 = space L1662 TSTB 0 chars? BEQ L1656 Yes, return pshs a bsr L1650 tfm s,d+ leas 1,s std Spointer L1656 RTS * NOTE: Should use LDA <negative, faster, and A not required L1800 TST negativ BEQ L1660 L1614 TST negativ BEQ L1656 L1636 LDA #$2D = - BRA L1632 L1640 LDA #$2B = + BRA L1632 L1620 LDA #$30 = 0 BRA L1662 * print string * PRstring PSHS X LDX 1,Y ldd 3,y L1670 bsr L1625 CLRA PULS PC,X * value of boolean variable * PRbool PSHS X LEAX L1668,PC = TRUE ldb #4 # chars to print LDA 2,Y BNE L1670 LEAX L1672,PC = FALSE incb 5 chars to print BRA L1670 * print integers * PRintg PSHS X ldx #$26 var.space in DP LBSR ItoA tst negativ NOTE: USE LDB instead beq L1711 lda #$2D = - sta ,-x inc digits L1711 LDB digits bra L1670 * pad with spaces (TAB) * L2015 TFR A,B L1712 SUBB charcoun BLS L1676 BSR spacing L1676 CLRA RTS * pad field with spaces * L2012 LDA charcoun ANDA #$0F ldb #17 16 chars/field subr a,b BRA spacing * terminate string * Strterm LDA #$0D /CR/ CLR charcoun LBSR L1632 L1680 CLRA RTS * justification of print using L1744 CLRB STB justify CMPA #$3C = < BEQ L1688 CMPA #$3E = > BNE L1690 INCB BRA L1688 L1690 CMPA #$5E = ^ BNE ckmarker DECB L1688 STB justify LDA ,X+ ckmarker CMPA #$2C = , BEQ L1694 CMPA #$FF BNE L1696 LDA <$94 BEQ L1698 LEAX -1,X BRA L1700 L1698 LDX <$8E TST <$DC BEQ L1702 CLR <$DC BRA L1694 L1696 CMPA #$29 = ) BEQ L1704 L1702 ORCC #1 RTS L1704 LDA <$94 BEQ L1702 L1700 DEC <$92 BNE L1706 LDU userSP PULU Y,A STA <$92 STY <$90 STU userSP LDA ,X+ DEC <$94 BRA ckmarker L1706 LDX <$90 L1694 STX <$8C ANDCC #$FE RTS * chars recognized by PRINT USING L1726 fcb 73 Integer fdb L2050-L1726 L2051Bas equ * fcb 72 Hexadecimal fdb L2051 L2052Bas equ * fcb 82 Real fdb L2052 L2053Bas equ * fcb 69 Exponential fdb L2053 L2054Bas equ * fcb 83 String fdb L2054 L2055Bas equ * fcb 66 Boolean fdb L2055 L2056Bas equ * fcb 84 Tab fdb L2056 L2057Bas equ * fcb 88 X - space fdb L2057 L2058Bas equ * fcb 39 ' - literal string fdb L2058 fcb 0 end of table * Tab function L2056 equ *-L2056Bas BSR ckmarker BCS err63 LDB fieldwid LBSR L1712 BRA L1714 * print spaces (X) * L2057 equ *-L2057Bas BSR ckmarker BCS err63 LDB fieldwid LBSR spacing BRA L1714 * print literal string * L2058 equ *-L2058Bas pshs x clrb L1718 CMPA #$FF BEQ err63 CMPA #$27 = ' beq L1716 incb LDA ,X+ BRA L1718 L1716 puls x leax -1,x lbsr L1625 leax 1,x LDA ,X+ LBSR ckmarker BCS err63 BRA L1714 PRNTUSIN PSHS Y,X CLR <$DC INC <$DC L1714 LDX <$8C BSR L1720 BCS L1722 CMPA #$28 BNE err62 LDA <$92 STB <$92 BEQ err62 INC <$94 LDU userSP LDY <$90 PSHU Y,A STU userSP STX <$90 LDA ,X+ L1722 LEAY <L1726,PC CLRB L1730 PSHS A EORA ,Y ANDA #$DF PULS A BEQ L1728 LEAY 3,Y INCB TST ,Y BNE L1730 err63 LDB #$3F BRA L1732 err62 LDB #$3E L1732 STB errcode COMA PULS PC,Y,X L1728 STB subrcode LDD 1,Y LEAY D,Y BSR L1720 BCC L1734 LDB #1 L1734 STB fieldwid JMP ,Y * calculate field width L1720 BSR number BCS L1736 TFR A,B BSR number BCS L1738 BSR L1740 BSR number BCS L1738 BSR L1740 TSTA BEQ L1742 CLRB L1742 LDA ,X+ BRA L1738 number LDA ,X+ L1434 CMPA #$30 = 0? BCS L1736 CMPA #$39 = 9? BHI L1736 SUBA #$30 ASCII -> dec. L1738 ANDCC #$FE RTS L1736 ORCC #1 RTS L1740 PSHS A LDA #10 MUL 10*B+A ADDB ,S+ ADCA #0 RTS L2052 equ *-L2052Bas L2053 equ *-L2053Bas CMPA #$2E format as real or exp. BNE err63 BSR L1720 BCS err63 STB <$89 L2051 equ *-L2051Bas L2054 equ *-L2054Bas L2055 equ *-L2055Bas L2050 LBSR L1744 Int, Hex, String, Boolean BCS err63 PULS Y,X INC <$DC L2018 LDB subrcode LBEQ FMTint DECB BEQ FMThex DECB LBEQ FMTreal DECB LBEQ FMTexp DECB LBEQ FMTstr LBRA FMTbool FMThex JSR table4 pshs y CMPA #4 BCS L1758 LDU 1,Y source: string ldd 3,y bra L1686 L1758 LEAU 1,Y LDA ,Y CMPA #2 BNE L1764 LDB #5 source: real number BRA L1686 L1764 CMPA #1 BNE L1766 LDB #2 source: integer CMPB fieldwid BCS L1768 L1766 LDB #1 byte, boolean LEAU 1,U L1768 TFR B,A ASLA CMPA fieldwid BLS L1686 ANDA #$0F CMPA #9 BLS L1784 ADDA #7 L1784 LBSR L1646 DEC fieldwid bra L1782 L1686 TST justify pshs b BEQ L1776 left justify BMI L1774 center digits ASLB right justify PSHS B LDB fieldwid SUBB ,S+ BCS L1776 BRA L1778 L1774 ASLB PSHS B LDB fieldwid SUBB ,S+ BCS L1776 ASRB L1778 LDA fieldwid subr b,a STA fieldwid LBSR spacing L1776 ldb fieldwid lbsr L1650 tfr d,y PULS B L1772 LDA ,U LSRA LSRA LSRA LSRA cmpa #9 bls L1773 adda #7 L1773 adda #$30 sta ,y+ decw BEQ L1782 L1770 LDA ,U+ anda #15 cmpa #9 bls L1771 adda #7 L1771 adda #$30 sta ,y+ decw BEQ L1782 DECB BNE L1772 lda #$20 Space pshs a tfm s,y+ leas 1,s L1782 sty Spointer puls y CLRA sta fieldwid RTS L1788 COMA RTS FMTint JSR table4 CMPA #2 BCS L1786 BNE L1788 wrong var. type LBSR FIX L1786 PSHS U,X LEAS -5,S LEAX ,S LBSR ItoA LDB fieldwid DECB SUBB digits BPL L1792 LEAS 5,S PULS U,X LBRA ovflow L1792 TST justify BEQ L1796 left justify BMI L1798 leading zeroes LBSR spacing right justify LBSR L1800 BRA L1802 L1796 LBSR L1800 PSHS B LDA digits LBSR L1624 PULS B LBSR spacing BRA L1804 L1798 LBSR L1800 LBSR L1620 L1802 LDA digits LBSR L1624 L1804 LEAS 5,S CLRA PULS PC,U,X FMTbool JSR table4 CMPA #3 BNE L1788 wrong type PSHS U,X LEAX L1668,PC LDB #4 LDA 2,Y BNE L1806 LEAX L1672,PC LDB #5 BRA L1806 FMTstr JSR table4 CMPA #4 BNE L1788 wrong type PSHS U,X LDX 1,Y ldd 3,y TSTA BNE L1808 L1806 CMPB fieldwid BLS L1810 L1808 LDB fieldwid L1810 TFR B,A NEGB ADDB fieldwid TST justify BEQ L1812 left justify BMI L1814 center text PSHS A right justify LBSR spacing PULS A LBSR L1624 BRA L1816 L1812 PSHS B BRA L1818 L1814 LSRB BCC L1820 INCB L1820 PSHS d LBSR spacing PULS A L1818 LBSR L1624 PULS B LBSR spacing L1816 CLRA PULS PC,U,X FMTreal JSR table4 CMPA #2 BEQ L1822 LBCC L1788 wrong type LBSR FLOAT L1822 PSHS U,X LEAS -$0A,S LEAX ,S LBSR RtoA LDA decimals CMPA #9 BGT L1824 LBSR L1826 LDA fieldwid SUBA #2 BMI L1824 SUBA <$89 BMI L1824 SUBA <$8A BPL L1828 L1824 LEAS $0A,S PULS U,X BRA ovflow L1828 STA <$88 LEAX ,S LDB justify BEQ L1830 left justify BMI L1832 fin. format BSR L1834 right justify BSR L1836 BRA L1838 L1830 BSR L1836 BSR L1834 BRA L1838 L1832 BSR L1834 BSR L1840 LBSR L1800 L1838 LEAS $0A,S CLRA PULS PC,U,X L1836 LBSR L1800 L1840 LDA <$8A LBSR L1624 LBSR L1616 LDB decimals BPL L1842 NEGB CMPB <$89 BLS L1844 LDB <$89 L1844 PSHS B LBSR L1620 LDB <$89 SUBB ,S+ STB <$89 LDA <$8B CMPA <$89 BLS L1846 NOTE: SHOULD BE BLS L1848 LDA <$89 L1846 BRA L1848 L1834 LDB <$88 LBRA spacing L1862 LBSR L1800 LDA <$8A LBSR L1624 LBSR L1616 L1842 LDA <$8B L1848 LBSR L1624 LDB <$89 SUBB <$8B BLE L1850 LBRA L1620 ovflow LDB fieldwid LDA #$2A = * LBSR L1662 CLRA L1850 RTS FMTexp JSR table4 CMPA #2 BEQ L1852 LBCC L1788 wrong type LBSR FLOAT L1852 PSHS U,X LEAS -$0A,S LEAX ,S LBSR RtoA LDA decimals PSHS A LDA #1 STA decimals BSR L1826 PULS A LDB decimals CMPB #1 BEQ L1854 INCA L1854 LDB #1 STB <$8A STA decimals LDA fieldwid SUBA #6 BMI L1856 SUBA <$89 BMI L1856 SUBA <$8A BPL L1858 L1856 LEAS $0A,S PULS U,X BRA ovflow L1858 STA <$88 LDB justify BEQ L1860 left justify BSR L1834 right justify BSR L1862 LBSR L1630 BRA L1864 L1860 BSR L1862 LBSR L1630 L1864 LBRA L1838 L1826 PSHS X LDA decimals ADDA <$89 BNE L1866 LDA ,X CMPA #$35 BCC L1868 L1866 DECA BMI L1870 CMPA #7 BHI L1870 LEAX A,X LDB 1,X CMPB #$35 BCS L1870 L1872 INC ,X LDB ,X CMPB #$39 L1310 BLS L1870 L1868 LDB #$30 STB ,X LEAX -1,X CMPX ,S BCC L1872 LDX ,S LEAX 8,X L1874 LDA ,-X STA 1,X CMPX ,S BHI L1874 LDA #$31 STA ,X INC decimals L1870 PULS X LDA decimals BPL L1876 CLRA L1876 STA <$8A NEGA ADDA #9 BPL L1878 CLRA L1878 CMPA <$89 BLS L1880 LDA <$89 L1880 STA <$8B RTS err48 LDB #$30 STB errcode COMA RTS emod MODEND equ * end