LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!);---------------------------------------------------------------------- ; A2X.BANKSW ------------ | ; | ; * This file is for the assembly lang c+ .III.PCL.4u' *A2X.BANKSW .6 *A2X.LOADER 6,INCLUDE.EQUS 37 .GENERIC.MACROS) 47 PDOS.SANEMACRO5 7l*A3.READ.ME >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@Luage programmer who is using | ; both main banks of memory in a 128K Apple //. It allows the | ; program and its data to reside in different banks. | ; | ;  CH LDX DATABANK STA $C002,X ;X=0 ==> read main, X=1 ==> read aux. STA $C004,X ;X=0 ==> write main, X=1 ==> write aux. ; ;-------------------------------------- ; 4. JSR TO THE REAL FP6502 AT $E000. ;-------------------------------------- JSR Slse readbank was bank 1. NEXT LDA $C014 ;check for actual writebank. BPL SWITCH ; if main was correct, go on INC CALWRTBNK ; else writebank was bank 1. ; ;-------------------------- ; 3. SWITCH TO DATA BANK. ;-------------------------- SWITES. ;------------------------------------------ LDA #0 ;record current bank arrangement as STA CALRDBNK ; 0 , for main memory. STA CALWRTBNK LDA $C013 ;check for actual readbank. BPL NEXT ; if main was correct, go on INC CALRDBNK ; eRESS FROM STACK AND SAVE. ;------------------------------------------------ PLA ;save return address in RETURN STA RETURN ; (see end of program). PLA STA RETURN+1 ; ;------------------------------------------ ; 2. SAVE CURRENT STATE OF BANK SWITCH----------------------------------------------------------------- ; ORG $FF80 ; ; data bank byte (0 or 1) must be previously loaded at $FFFD. ; DATABANK EQU $FFFD SANE EQU $E000 ; ;------------------------------------------------ ; 1. REMOVE RETURN ADD0. | ; 5. SET BANK SWITCHES BACK TO ORIGINAL STATE. | ; 6. PUT RETURN ADDRESS ON THE STACK AND RTS TO CALLER. | ; | ;----- 1. REMOVE RETURN ADDRESS FROM STACK AND SAVE. | ; 2. SAVE CURRENT STATE OF BANK SWITCHES. | ; 3. SWITCH TO DATA BANK. | ; 4. JSR TO THE REAL FP6502 AT $E00ot interfere with $FFFE/FFFF. | ; | ; | ; MODULES: | ; | ; * This is a sample file. If additional code is required, this | ; routine can be expanded to a maximum of 126 bytes - it must | ; begin at or after $FF80 and must nhat the byte DATABANK | ; at $FFFD be preset by the user to either: | ; 0 - Data in Main memory bank or | ; 1 - Data in Alternate memory bank. | ; change your code to enter at $FF80. (FP6502 EQU $FF80) | ; | ; | ; * NOTE : Using this routine REQUIRES t | ; * To use this routine: | ; 1) Store the number of the bank containing data at $FFFD. | ; 2) DO NOT make calls to FP6502 at $E000 as usual. Instead | ; * The soft switches RAMRD and RAMWRT ($C00X and $C01X) are used in | ; the assembly code below. See the Apple // Reference Manual, | ; page 75, for details. | ; ANE ; ;----------------------------------------------- ; 5. SET BANK SWITCHES BACK TO ORIGINAL STATE. ;----------------------------------------------- LDX CALRDBNK STA $C002,X ;X=0 ==> read main, X=1 ==> read aux. LDX CALWRTBNK STA $C004,X ;X=0 ==> write main, X=1 ==> write aux. ; ; ;-------------------------------------------------------- ; 6. PUT RETURN ADDRESS ON THE STACK AND RTS TO CALLER. ;-------------------------------------------------------- LDA RETURN+1 PHA LDA RETURN PHA ; he loader is broken into the modules: | ; | ; 1. READ/WRITE ENABLE LANGUAGE CARD RAM. | ; 2. ENTRY TO AUXILIARY LANGUAGE CARD. om $2000 to $E000. | ; * and A2X.BANKSW.0 from $4200 to top of language card, $FF80. | ; NOTE: A2X.BANKSW.0 cannot be more than 126 bytes long. | ; | ; * T places the beginning of code at $2000. | ; | ; | ; * Moves code portion of A2X.AFP.CODE fr | ; * The disk version of A2X.AFP.CODE has 512 bytes of 'header' | ; information at the beginning of the file. The actual code | ; starts $200 bytes into the file. Therefore loading at $1E00 | ; Assumes the file A2X.AFP.CODE has already been loaded at $1E00. | ; * Assumes the file A2X.BANKSW.0 has already been loaded at $4200. | ; (Note: If bankswitching is not required, ignore (6) below.) | ; laces in the assembly code | ; below. For an explanation of what these switches do and how | ; to use them refer to the Apple // Reference Manual, pages 68-75. | ; | ; * load SANE, and run. | ; | ; | ; * Soft-switches are used in several puage programmer who cannot | ; assume that SANE is preloaded by the user. It gives the | ; programmer the capability to load SANE directly, and might be | ; included as part of a stand-alone package designed to boot, | ; ;---------------------------------------------------------------------- ; LANGUAGE CARD LOADER | ; | ; * This file is for the assembly langad Bank. CALWRTBNK DB 0 ;Caller Write Bank. RTS ; ;------------------------------------------------------------ ; ** STORAGE FOR RETURN ADDRESS AND STATE OF SOFT SWITCHES. ;------------------------------------------------------------ RETURN DW 0 ;Store return address here. CALRDBNK DB 0 ;Caller Re | ; 3. INITIALIZE STARTING ADDRESSES FOR MOVING CODE. | ; 4. TRANSFER FP6502 TO LANGUAGE CARD. | ; 5. TRANSFER BANKSWITCHER TO LANGUAGE CARD. | ; 6. COPY INTERRUPT VECTOR FROM ROM TO RAM. | ; 7. EXIT TO MAIN STACK/ZERO PAGE/LANGUAGE CARD. | ; 8. RTS TO CALLER. | ;------------------------------------------ !"#$%&'---------------- ; ;----------------------------------------------------------- ; Operation code masks. ;----------------------------------------------------------- FOADD EQU $0000 ; add FOSUB EQU $0002 ; subtract FOMUL EQU $0004 ; multiply FODIV EQU $0006;----------------------------------------------------------- ; ; FILE: INCLUDE.EQUS ; ; These equates and the individual assembly language macros ; give access to the 6502 floating-point arithmetic routines. ;-------------------------------------------GE CARD. ;------------------------------------------------ STA MAINZP PLP ;Restore original interrupt state. ; ;------------------- ; 8. RTS TO CALLER. ;------------------- RTS put it in RAM LDA $FFFF ;get high byte from ROM STA $FFFF ; put it in RAM LDA MYSTATE ;restore user state of high LDA MYSTATE ; address space ($D000-FFFF). ; ;------------------------------------------------ ; 7. EXIT TO MAIN STACK/ZERO PAGE/LANGUA$FF80,Y DEY BPL AGAIN ; ;-------------------------------------------- ; 6. COPY INTERRUPT VECTOR FROM ROM TO RAM. ;-------------------------------------------- LDA $C089 ;soft switch, read ROM, write RAM LDA $FFFE ;get low byte from ROM STA $FFFE ; 5. TRANSFER BANKSWITCHER TO LANGUAGE CARD. ;--------------------------------------------- ; The last 128 bytes of memory are overwritten by the bankswitcher ; and the interrupt vector. LDY #$7D ;prepare to transfer 126 bytes. AGAIN LDA $4200,Y STA ing. INY ;next Y. BNE LOOP ;done with 256 bytes? INC BASESTART+1 ; if so, go on to next page of source. INC BASEEND+1 ; and of destination. DEX BNE ENGINE ;keep going if 32 pages not yet moved. ; ;--------------------------------------------- ; ------- ; 4. TRANSFER FP6502 TO LANGUAGE CARD. ;--------------------------------------- LDX #$20 ;transfer 8K bytes (or 32 pages). ENGINE LDY #0 LOOP LDA (BASESTART),Y ;collect Y-th byte of engine. STA (BASEEND),Y ;store at Y-th byte of page now loadDDRESSES FOR MOVING CODE. ;---------------------------------------------------- LDA #0 ;Note that $2000 and $E000 are hard-coded. STA BASESTART LDA #$20 STA BASESTART+1 LDA #$00 STA BASEEND LDA #$E0 STA BASEEND+1 ; ;------------------------------------------------------------- PHP ;Current interrupt state on stack. SEI ;Disable interrupts while stack ptr bad. STA ALTZP ;switch to auxiliary stack, zero page, lc. ; ;---------------------------------------------------- ; 3. INITIALIZE STARTING AWRITE ENABLE LANGUAGE CARD RAM. ;------------------------------------------ LDA $C08B ;soft switches. See Apple // LDA $C08B ; Reference Manual for details. ; ;--------------------------------------- ; 2. ENTRY TO AUXILIARY LANGUAGE CARD. ;----------2nd $D000 space. ; In Pascal, X=B. In ProDOS, usually X=A. BASESTART EQU $06 ;zero page, for indirect addressing. BASEEND EQU $08 ;zero page, for indirect addressing. ; ;------------------------------------------ ; 1. READ/----------------------------| ; ORG $300 ;put it where you like, relocatable code. ; ALTZP EQU $C009 ;soft switch MAINZP EQU $C008 ;soft switch MYSTATE EQU $C08X ;soft switch to return to user's state ; of RAM/ROM and 1st/ ; divide FOCMP EQU $0008 ; compare, no exception from unordered FOCPX EQU $000A ; compare, signal invalid if unordered FOREM EQU $000C ; remainder FOZ2X EQU $000E ; convert to extended FOX2Z EQU $0010 ; convert from extended FOSQRT EQU $0012 ; square rootfinancial function. NANINIT EQU 255 ; Uninitialized storage. ;----------------------------------------------------------- ;----------------------------------------------------------- ;----------------------------------------------------------- ;---------G EQU 33 ; Invalid argument to trig routine. NANINVTRIG EQU 34 ; Invalid argument to inverse trig routine. NANLOG EQU 36 ; Invalid argument to log routine. NANPOWER EQU 37 ; Invalid argument to x^i or x^y routine. NANFINAN EQU 38 ; Invalid argument to 0 * INF. NANREM EQU 9 ; Invalid remainder or mod such as x REM 0. NANASCBIN EQU 17 ; Attempt to convert invalid ASCII string. NANCOMP EQU 20 ; Result of converting comp NaN to floating. NANZERO EQU 21 ; Attempt to create a NaN with a zero code. NANTRI ;----------------------------------------------------------- NANSQRT EQU 1 ; Invalid square root such as sqrt(-1). NANADD EQU 2 ; Invalid addition such as +INF - +INF. NANDIV EQU 4 ; Invalid division such as 0/0. NANMUL EQU 8 ; Invalid multiply such asND EQU $14 ; compound FOANNUIT EQU $16 ; annuity FOATANX EQU $18 ; arctangent FOSINX EQU $1A ; sine FOCOSX EQU $1C ; cosine FOTANX EQU $1E ; tangent FORANDX EQU $20 ; random ; ;----------------------------------------------------------- ; NaN error codes. OLOG21X EQU $06 ; log2 (1 + x) FOEXPX EQU $08 ; base-e exponential FOEXP2X EQU $0A ; base-2 exponential FOEXP1X EQU $0C ; exp (x) - 1 FOEXP21X EQU $0E ; exp2 (x) - 1 FOXPWRI EQU $10 ; integer exponentiation FOXPWRY EQU $12 ; general exponentiation FOCOMP ; ;----------------------------------------------------------- ; Elementary function operation code masks. ;----------------------------------------------------------- FOLNX EQU $00 ; base-e log FOLOG2X EQU $02 ; base-2 log FOLN1X EQU $04 ; ln (1 + x) Fl FCDENORM EQU $01 ; 1: denormal ; ;----------------------------------------------------------- ; Exceptions. ;----------------------------------------------------------- FBINVALID EQU $01 FBUFLOW EQU $02 FBOFLOW EQU $04 FBDIVZER EQU $08 FBINEXACT EQU $10-------------------------------------- ; Class. ;----------------------------------------------------------- FCSNAN EQU $FC ; -4: signaling NAN FCQNAN EQU $FD ; -3: quiet NAN FCINF EQU $FE ; -2: infinite FCZERO EQU $FF ; -1: zero FCNORM EQU $00 ; 0: norma-- 32-bit float ;UNDEFINED EQU $03 FFINT EQU $04 ; integer -- 16-bit integer FFCOMP EQU $05 ; comp -- 64-bit integer ; UNDEFINED EQU $06 ; UNDEFINED EQU $07 ; ;--------------------- ; ;----------------------------------------------------------- ; Operand format masks. ;----------------------------------------------------------- FFEXT EQU $00 ; extended -- 80-bit float FFDBL EQU $01 ; double -- 64-bit float FFSGL EQU $02 ; single EQU $0011 ; copy sign ; UNDEFINED EQU $0013 FOSETXCP EQU $0015 ; set exception FOPROCENTRY EQU $0017 ; procedure-entry FOPROCEXIT EQU $0019 ; procedure-exit FOTESTXCP EQU $001B ; test exception ; UNDEFINED EQU $001D ; UNDEFINED EQU $001FV EQU $0003 ; get environment FOSETHV EQU $0005 ; set halt vector FOGETHV EQU $0007 ; get halt vector FOD2B EQU $0009 ; convert decimal to binary FOB2D EQU $000B ; convert binary to decimal FONEG EQU $000D ; negate FOABS EQU $000F ; absolute value FOCPYSGN FORTI EQU $0014 ; round to integral value FOTTI EQU $0016 ; truncate to integral value FOSCALB EQU $0018 ; binary scale FOLOGB EQU $001A ; binary log FOCLASS EQU $001C ; classify FONEXT EQU $001E ; next-after ; FOSETENV EQU $0001 ; set environment FOGETEN-------------------------------------------------- FADDX LDA #FFEXT PHA LDA #FOADD PHA JSR FP6502 FADDD LDA #FFDBL PHA LDA #FOADD PHA JSR FP6502 FADDS LDA #FFSGL PHA LDA #FOADD PHA JSR FP6502 FADDC LDA #FFCOMP PHA LDA #FOADD PHA JSR FP6502 FADDI LDA #FFINT PHA LDA #FOADD PHA 02 FDEC2S LDA #FFSGL PHA LDA #FOD2B PHA JSR FP6502 FDEC2C LDA #FFCOMP PHA LDA #FOD2B PHA JSR FP6502 FDEC2I LDA #FFINT PHA LDA #FOD2B PHA JSR FP6502 FCMPX LDA #FFEXT PHA LDA #FOCMP PHA JSR FP6502 FCMPD LDA #FFDBL PHA LDA #FOCFSGL PHA LDA #FOB2D PHA JSR FP6502 FC2DEC LDA #FFCOMP PHA LDA #FOB2D PHA JSR FP6502 FI2DEC LDA #FFINT PHA LDA #FOB2D PHA JSR FP6502 FDEC2X LDA #FFEXT PHA LDA #FOD2B PHA JSR FP6502 FDEC2D LDA #FFDBL PHA LDA #FOD2B PHA JSR FP65FINT PHA LDA #FOX2Z PHA JSR FP6502 FX2C LDA #FFCOMP PHA LDA #FOX2Z PHA JSR FP6502 FX2DEC LDA #FFEXT PHA LDA #FOB2D PHA JSR FP6502 FD2DEC LDA #FFDBL PHA LDA #FOB2D PHA JSR FP6502 FS2DEC LDA #F LDA #FOZ2X PHA JSR FP6502 FI2X LDA #FFINT PHA LDA #FOZ2X PHA JSR FP6502 FC2X LDA #FFCOMP PHA LDA #FOZ2X PHA JSR FP6502 FX2D LDA #FFDBL PHA LDA #FOX2Z PHA JSR FP6502 FX2S LDA #FFSGL PHA LDA #FOX2Z PHA JSR FP6502 FX2I LDA #FHA JSR FP6502 FNEXTD LDA #FFDBL PHA LDA #FONEXT PHA JSR FP6502 FNEXTX LDA #FFEXT PHA LDA #FONEXT PHA JSR FP6502 FX2X LDA #FFEXT PHA LDA #FOZ2X PHA JSR FP6502 FD2X LDA #FFDBL PHA LDA #FOZ2X PHA JSR FP6502 FS2X LDA #FFSGL PHAYSGNC LDA #FFCOMP PHA LDA #FOCPYSGN PHA JSR FP6502 FCPYSGNI LDA #FFINT PHA LDA #FOCPYSGN PHA JSR FP6502 FNEGX LDA #0 PHA LDA #FONEG PHA JSR FP6502 FABSX LDA #0 PHA LDA #FOABS PHA JSR FP6502 FNEXTS LDA #FFSGL PHA LDA #FONEXT PA JSR FP6502 FSCALBX LDA #FFINT PHA LDA #FOSCALB PHA JSR FP6502 FCPYSGNX LDA #FFEXT PHA LDA #FOCPYSGN PHA JSR FP6502 FCPYSGND LDA #FFDBL PHA LDA #FOCPYSGN PHA JSR FP6502 FCPYSGNS LDA #FFSGL PHA LDA #FOCPYSGN PHA JSR FP6502 FCP2 FREMD LDA #FFDBL PHA LDA #FOREM PHA JSR FP6502 FREMS LDA #FFSGL PHA LDA #FOREM PHA JSR FP6502 FREMC LDA #FFCOMP PHA LDA #FOREM PHA JSR FP6502 FREMI LDA #FFINT PHA LDA #FOREM PHA JSR FP6502 FLOGBX LDA #0 PHA LDA #FOLOGB PHDIVI LDA #FFINT PHA LDA #FODIV PHA JSR FP6502 FSQRTX LDA #0 PHA LDA #FOSQRT PHA JSR FP6502 FRINTX LDA #0 PHA LDA #FORTI PHA JSR FP6502 FTINTX LDA #0 PHA LDA #FOTTI PHA JSR FP6502 FREMX LDA #FFEXT PHA LDA #FOREM PHA JSR FP650FINT PHA LDA #FOMUL PHA JSR FP6502 FDIVX LDA #FFEXT PHA LDA #FODIV PHA JSR FP6502 FDIVD LDA #FFDBL PHA LDA #FODIV PHA JSR FP6502 FDIVS LDA #FFSGL PHA LDA #FODIV PHA JSR FP6502 FDIVC LDA #FFCOMP PHA LDA #FODIV PHA JSR FP6502 FA #FOSUB PHA JSR FP6502 FMULX LDA #FFEXT PHA LDA #FOMUL PHA JSR FP6502 FMULD LDA #FFDBL PHA LDA #FOMUL PHA JSR FP6502 FMULS LDA #FFSGL PHA LDA #FOMUL PHA JSR FP6502 FMULC LDA #FFCOMP PHA LDA #FOMUL PHA JSR FP6502 FMULI LDA #F(*+,-./01234 JSR FP6502 FSUBX LDA #FFEXT PHA LDA #FOSUB PHA JSR FP6502 FSUBD LDA #FFDBL PHA LDA #FOSUB PHA JSR FP6502 FSUBS LDA #FFSGL PHA LDA #FOSUB PHA JSR FP6502 FSUBC LDA #FFCOMP PHA LDA #FOSUB PHA JSR FP6502 FSUBI LDA #FFINT PHA LDMP PHA JSR FP6502 FCMPS LDA #FFSGL PHA LDA #FOCMP PHA JSR FP6502 FCMPC LDA #FFCOMP PHA LDA #FOCMP PHA JSR FP6502 FCMPI LDA #FFINT PHA LDA #FOCMP PHA JSR FP6502 FCPXX LDA #FFEXT PHA LDA #FOCPX PHA JSR FP6502 FCPXD LDA #FFDBL PHA LDA #FOCPX PHA JSR FP6502 FCPXS LDA #FFSGL PHA LDA #FOCPX PHA JSR FP6502 FCPXC LDA #FFCOMP PHA LDA #FOCPX PHA JSR FP6502 FCPXI LDA #FFINT PHA LDA #FOCPX PHA JSR FP6502 FBEQ BEQ &1 FBLT BMI &1 FBLE BMI &1 BEQ &68FREMSX./5FREMCY//5FREMIZ.05FLOGBX[+05FSCALBX\005FCPYSGNX]115FCPYSGND^/:,5FDIVIR.;,5FSQRTXS+;-5FRINTXT*;-5FTINTXU*;-5FREMXV.;.5FREMDW..557FMULSK.9 5FMULCL/:)5FMULIM.:*5FDIVXN.:*5FDIVDO.:+5FDIVSP.:+5FDIVCQ.8&5FSUBDE.8'5FSUBSF.9'5FSUBCG/9(5FSUBIH.9(5FMULXI.9(5FMULDJ.9 56PDOS.SANEMACROv7' {'FADDX?.7 5FADDD@.8)5FADDSA.8(5FADDCB/8&5FADDIC.8&5FSUBXD02 FRANDX PHA LDA #FORANDX PHA JSR ELEMS6502 LDA #FOANNUIT PHA JSR ELEMS6502 FATANX PHA LDA #FOATANX PHA JSR ELEMS6502 FSINX PHA LDA #FOSINX PHA JSR ELEMS6502 FCOSX PHA LDA #FOCOSX PHA JSR ELEMS6502 FTANX PHA LDA #FOTANX PHA JSR ELEMS65X PHA LDA #FOEXP1X PHA JSR ELEMS6502 FEXP21X PHA LDA #FOEXP21X PHA JSR ELEMS6502 FXPWRI PHA LDA #FOXPWRI PHA JSR ELEMS6502 FXPWRY PHA LDA #FOXPWRY PHA JSR ELEMS6502 FCOMPOUND PHA LDA #FOCOMPND PHA JSR ELEMS6502 FANNUITY PHA ELEMS6502 FLOG2X PHA LDA #FOLOG2X PHA JSR ELEMS6502 FLN1X PHA LDA #FOLN1X PHA JSR ELEMS6502 FLOG21X PHA LDA #FOLOG21X PHA JSR ELEMS6502 FEXPX PHA LDA #FOEXPX PHA JSR ELEMS6502 FEXP2X PHA LDA #FOEXP2X PHA JSR ELEMS6502 FEXP1A #FOSETXCP PHA JSR FP6502 FPROCENTRY PHA LDA #FOPROCENTRY PHA JSR FP6502 FPROCEXIT PHA LDA #FOPROCEXIT PHA JSR FP6502 FGETHV PHA LDA #FOGETHV PHA JSR FP6502 FSETHV PHA LDA #FOSETHV PHA JSR FP6502 FLNX PHA LDA #FOLNX PHA JSRFCDENORM BEQ &1 FBNZENUM TXA BPL &1 FBNUM INX BPL &1 FBMINUS BMI &1 FBPLUS BPL &1 FGETENV PHA LDA #FOGETENV PHA JSR FP6502 FSETENV PHA LDA #FOSETENV PHA JSR FP6502 FTESTXCP PHA LDA #FOTESTXCP PHA JSR FP6502 FSETXCP PHA LDMP PHA LDA #FOCLASS PHA JSR FP6502 FCLASSI LDA #FFINT PHA LDA #FOCLASS PHA JSR FP6502 FBSNAN CPX #FCSNAN BEQ &1 FBQNAN CPX #FCQNAN BEQ &1 FBINF CPX #FCINF BEQ &1 FBZERO CPX #FCZERO BEQ &1 FBNORM TXA BEQ &1 FBDENORM CPX # BNE &1 FBUE BEQ &1 BMI *+4 BVC &1 FBLG BMI &1 BVS &1 FCLASSS LDA #FFSGL PHA LDA #FOCLASS PHA JSR FP6502 FCLASSD LDA #FFDBL PHA LDA #FOCLASS PHA JSR FP6502 FCLASSX LDA #FFEXT PHA LDA #FOCLASS PHA JSR FP6502 FCLASSC LDA #FFCO1 FBGT BVS &1 FBGE BVS &1 BEQ &1 FBULT BMI &1 BVS *+4 BNE &1 FBULE BMI &1 BEQ &1 BVC &1 FBUGT BVS &1 BMI *+4 BNE &1 FBUGE BVS &1 BEQ &1 BPL &1 FBO BMI &1 BVS &1 BEQ &1 FBU BVS *+6 BMI *+4 BNE &1 FBNE BMI &1 BVS &1 115FCPYSGNS_125FCPYSGNC`225FCPYSGNIa135FNEGXb*35FABSXc*35FNEXTSd/4579FNEXTDe/55FNEXTXf/55FX2Xg.55FD2Xh.65FS2Xi.65FI2Xj.75FC2Xk LDA #FFEXT PHA LDA #FOADD PHA JSR FP6502 '% 5=FCOMPOUND(! 5FANNUITY( 5FATANX'" 5FSINX&# 5FCOSX&$ 5FTANX&$ 5FRANDX( 5FEXPX& 5FEXP2X' 5FEXP1X' 5FEXP21X( 5FXPWRI' 5FXPWRY' 5<>FPROCEXIT' 5FGETHV$ 5FSETHV$ 5FLNX% 5FLOG2X' 5FLN1X& 5FLOG21X 5FBPLUS 5FGETENV% 5FSETENV% 5FTESTXCP& 5FSETXCP% 5FPROCENTRY( 5;=FBINF  5FBZERO 5FBNORM  5FBDENORM 5FBNZENUM  5FBNUM  5FBMINUS0  5FCLASSD0  5FCLASSX0  5FCLASSC1  5FCLASSI0  5FBSNAN  5FBQNAN  5:<FBUGE  5FBU  5FBO  5FBNE  5FBUE  5FBLG  5FCLASSS  5FBLE  5FBGT  5FBGE  5FBULT  5FBULE  5FBUGT  59;FCPXX. 5FCPXD. 5FCPXS. 5FCPXC/ 5FCPXI.  5FBEQ  5FBLT/95FDEC2Iy.:5FCMPXz.:5FCMPD{.;5FCMPS|.;5FCMPC}/ 5FCMPI~. 58:FS2DECr.:5FC2DECs/;5FI2DECt.;5FDEC2Xu.85FDEC2Dv.85FDEC2Sw.95FDEC2Cx/75FX2Dl.85FX2Sm.85FX2In.95FX2Co/95FX2DECp.95FD2DECq.:5 LDA #FFDBL PHA LDA #FOADD PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOSUB PHA JSR FP6502 LDA #FFSGL PHA LDA #FOSUB PHA JSR FP6502 LDA #FFDBL PHA LDA #FOSUB PHA JSR FP6502 LDA #FFEXT PHA LDA #FOSUB PHA JSR FP6502 LDA #FFINT PHA LDA #FOADD PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOADD PHA JSR FP6502 LDA #FFSGL PHA LDA #FOADD PHA JSR FP6502 LDA #FFINT PHA LDA #FOSUB PHA JSR FP6502 LDA #FFDBL PHA LDA #FODIV PHA JSR FP6502 LDA #FFEXT PHA LDA #FODIV PHA JSR FP6502 LDA #FFINT PHA LDA #FOMUL PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOMUL PHA JSR FP6502 LDA #FFSGL PHA LDA #FOMUL PHA JSR FP6502 LDA #FFDBL PHA LDA #FOMUL PHA JSR FP6502 LDA #FFEXT PHA LDA #FOMUL PHA JSR FP6502 LDA #FFSGL PHA LDA #FODIV PHA JSR FP6502 LDA #FFDBL PHA LDA #FOREM PHA JSR FP6502 LDA #FFEXT PHA LDA #FOREM PHA JSR FP6502 LDA #0 PHA LDA #FOTTI PHA JSR FP6502 LDA #0 PHA LDA #FORTI PHA JSR FP6502 LDA #0 PHA LDA #FOSQRT PHA JSR FP6502 LDA #FFINT PHA LDA #FODIV PHA JSR FP6502 LDA #FFCOMP PHA LDA #FODIV PHA JSR FP6502 LDA #FFSGL PHA LDA #FOREM PHA JSR FP6502 LDA #FFSGL PHA LDA #FOCPYSGN PHA JSR FP6502 LDA #FFDBL PHA LDA #FOCPYSGN PHA JSR FP6502 LDA #FFEXT PHA LDA #FOCPYSGN PHA JSR FP6502 LDA #FFINT PHA LDA #FOSCALB PHA JSR FP6502 LDA #0 PHA LDA #FOLOGB PHA JSR FP6502 LDA #FFINT PHA LDA #FOREM PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOREM PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOCPYSGN PHA JSR FP6502 LDA #FFEXT PHA LDA #FOZ2X PHA JSR FP6502 LDA #FFEXT PHA LDA #FONEXT PHA JSR FP6502 LDA #FFDBL PHA LDA #FONEXT PHA JSR FP6502 LDA #FFSGL PHA LDA #FONEXT PHA JSR FP6502 LDA #0 PHA LDA #FOABS PHA JSR FP6502 LDA #0 PHA LDA #FONEG PHA JSR FP6502 LDA #FFINT PHA LDA #FOCPYSGN PHA JSR FP6502 LDA #FFDBL PHA LDA #FOZ2X PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOX2Z PHA JSR FP6502 LDA #FFINT PHA LDA #FOX2Z PHA JSR FP6502 LDA #FFSGL PHA LDA #FOX2Z PHA JSR FP6502 LDA #FFDBL PHA LDA #FOX2Z PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOZ2X PHA JSR FP6502 LDA #FFINT PHA LDA #FOZ2X PHA JSR FP6502 LDA #FFSGL PHA LDA #FOZ2X PHA JSR FP6502 LDA #FFEXT PHA LDA #FOB2D PHA JSR FP6502 LDA #FFSGL PHA LDA #FOD2B PHA JSR FP6502 LDA #FFDBL PHA LDA #FOD2B PHA JSR FP6502 LDA #FFEXT PHA LDA #FOD2B PHA JSR FP6502 LDA #FFINT PHA LDA #FOB2D PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOB2D PHA JSR FP6502 LDA #FFSGL PHA LDA #FOB2D PHA JSR FP6502 LDA #FFDBL PHA LDA #FOB2D PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOD2B PHA JSR FP6502 LDA #FFEXT PHA LDA #FOCPX PHA JSR FP6502 LDA #FFINT PHA LDA #FOCMP PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOCMP PHA JSR FP6502 LDA #FFSGL PHA LDA #FOCMP PHA JSR FP6502 LDA #FFDBL PHA LDA #FOCMP PHA JSR FP6502 LDA #FFEXT PHA LDA #FOCMP PHA JSR FP6502 LDA #FFINT PHA LDA #FOD2B PHA JSR FP6502 LDA #FFDBL PHA LDA #FOCPX PHA JSR FP6502 BVS &1 BMI &1 BEQ &1 BMI &1 BEQ &1 LDA #FFINT PHA LDA #FOCPX PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOCPX PHA JSR FP6502 LDA #FFSGL PHA LDA #FOCPX PHA JSR FP6502 BVS &1 BEQ &1 BMI &1 BVS &1 BNE &1 BMI &1 BVS &1 BEQ &1 BVS *+6 BMI *+4 BNE &1 BVS &1 BEQ &1 BPL &1 BVS &1 BMI *+4 BNE &1 BMI &1 BEQ &1 BVC &1 BMI &1 BVS *+4 BNE &1 BEQ &1 BMI *+4 BVC &1 CPX #FCSNAN BEQ &1 LDA #FFINT PHA LDA #FOCLASS PHA JSR FP6502 LDA #FFCOMP PHA LDA #FOCLASS PHA JSR FP6502 LDA #FFEXT PHA LDA #FOCLASS PHA JSR FP6502 LDA #FFDBL PHA LDA #FOCLASS PHA JSR FP6502 LDA #FFSGL PHA LDA #FOCLASS PHA JSR FP6502 BMI &1 BVS &1 CPX #FCQNAN BEQ &1 BMI &1 INX BPL &1 TXA BPL &1 CPX #FCDENORM BEQ &1 TXA BEQ &1 CPX #FCZERO BEQ &1 CPX #FCINF BEQ &1 BPL &1 PHA LDA #FOGETHV PHA JSR FP6502 PHA LDA #FOPROCEXIT PHA JSR FP6502 PHA LDA #FOPROCENTRY PHA JSR FP6502 PHA LDA #FOSETXCP PHA JSR FP6502 PHA LDA #FOTESTXCP PHA JSR FP6502 PHA LDA #FOSETENV PHA JSR FP6502 PHA LDA #FOGETENV PHA JSR FP6502 PHA LDA #FOSETHV PHA JSR FP6502 PHA LDA #FOEXP1X PHA JSR ELEMS6502 PHA LDA #FOEXP2X PHA JSR ELEMS6502 PHA LDA #FOEXPX PHA JSR ELEMS6502 PHA LDA #FOLOG21X PHA JSR ELEMS6502 PHA LDA #FOLN1X PHA JSR ELEMS6502 PHA LDA #FOLOG2X PHA JSR ELEMS6502 PHA LDA #FOLNX PHA JSR ELEMS6502 PHA LDA #FOEXP21X PHA JSR ELEMS6502 PHA LDA #FOCOSX PHA JSR ELEMS6502 PHA LDA #FOSINX PHA JSR ELEMS6502 PHA LDA #FOATANX PHA JSR ELEMS6502 PHA LDA #FOANNUIT PHA JSR ELEMS6502 PHA LDA #FOCOMPND PHA JSR ELEMS6502 PHA LDA #FOXPWRY PHA JSR ELEMS6502 PHA LDA #FOXPWRI PHA JSR ELEMS6502 PHA LDA #FOTANX PHA JSR ELEMS6502 u mean I would have to write my own routines for these ! Ugh ! After consulting several standard works on numerical analysis, I started to work programming these functions myself. Why not simply admit defeat and go do it on a machine like the necessary trigonometric functions needed to provide a complete extension of the mathematical functions available in single precision. (There were plenty of financial functions in Elems so you know who Apple was trying to please.) Good grief, yo on the AIII under Pascal was just what I needed for an application that I was working on at the time. Great ! It was not until I had read the Numerics Manual several times that I discovered that the Elems unit did not contain a random generator or the the AIII lost out to you know who's computer in many scientific applications. The development of the SANE and Elems units was one of Apple's responses to this market pressure. This extended precision capability that appeared to be availableeger available in both Business Basic and Pascal are sufficient for accounting purposes. For scientific applications, however, the lack of a true double precision floating point capability in either of these languages is one of the reasons was bundled along with the familiar AIII Pascal spiralbound manuals. I am sure some of you read through this manual and were immediately turned off by the system's seeming complexity and its attention to detail. For many business purposes, the long int AIII. Everyone who has a copy of AIII Pascal v1.1 should have gotten a copy of the SANE unit plus a partially complete version of its companion unit Elems. The booklet "Numerics Manual: A Guide to Using the Apple III Pascal SANE and Elems Units" cimal places to a certain number ?? If so then you need to know about the Apple Standard Numerical Environment (SANE). This revolutionary package was an attempt by Apple to standardize all numerical processing done on its computers including the ** NOTE THE APPLE /// SANE FILES ARE ALL ON A SUBDIRECTORY ON DISK 3PCL-05, ON SIDE TWO ** 'Secret' Number Crunching on the AIII by D. D. Meisel, Ph.D. Have you ever been doing a numerical problem on the AIII and wished for just a few more de PHA LDA #FORANDX PHA JSR ELEMS6502 TRS-80 that has double precision built right into BASIC ? Well, I did better than that and put the problem back on a main frame. Some time after that I wanted to bring up Apple II Pascal for my students and noticed that Apple was quietly selling SANE as separate items in both Pascal and Assembly language versions. This got my curiosity up so I ordered copies of these (#A2W0012 and #A2W0015) through my employer. When these arrived I found that not only did these have AII versions, but that the and ELEMS.CODE . ** NOTE THESE FILES ARE ALL ON A SUBDIRECTORY ON DISK 3PCL-05, SIDE TWO ** , SIDE TWO ** ELEM.CODE CUSTOMIZE.DATA A3.CUSTOM.CODE A3.CUSTOM.LIB SANEMACRO.TEXT These are all copyrighted by Apple Computer, Inc., however, I see no reason why owners of AIII Pascal who got SANE/Elems with v1.1 are not entitled to an update of APPL3.SANE.CODE ble functions are in general more primitive and there are no string conversion routines. The Pascal versions of SANE/Elems on this diskette are: APPL3.SANE.CODE and ELEMS.CODE The 6502 versions (AIII assembler compatable only) are: A3.AFP.CODE A3.Ahere are problems with string conversion and the fact that the units use variable types that have no counterparts in either language. This means that one is forced to return to using the 6502 machine language versions of SANE/Elems. The availaion of MODULA-2 and hit a snag right off the bat. The Pascal units translated quite well except when I tried to insert them in the MODULA-2 library there were segment confilicts. (The same is true for the PGRAF unit.). In FORTRAN and Business Basic t AII Pascal programmers have an immediately useable AIII version of SANE/Elems that is complete, but few probably know it. What about FORTRAN, Business Basic, and MODULA-2 ? Well, I have tried the conversion of SANE/Elems to the Volition versand will be Apple's answer to the 8087 chip in the baby blue. It would appear that if one has SANE/Elems availble for use on the AIII, numerical computation will be of equal power (though slower) of that on the MAC and future Apple machines. Thus some at the machine-language 6502 versions of SANE/Elems for the AII are placed into a mysterious 8k space "reserved for use by Apple". Since there are also 68000 SANE/Elems versions, one suspects that SANE will surface as a PROM in the new Apple IIx in as was promised (but not done, at least, for the AIII) in the Numerics Manual. Within six months of offering SANE/Elems as an AII developers product, Apple has now discontinued it. Is this simply confusion or something more devious ? It turns out th In fact, when I got my copy of Apple III Pascal v1.2, the SANE/Elems units were not even there at all !!! I have not checked Apple II Pascal v1.3 to see if SANE/Elems is in the supplied SYSTEM.LIBRARY. It is possible that the functions are built ctions and the random generator were a part of the package. In addition, instructions for computing a variety of other trig functions was given in an appendix. Developers of SANE had completed the task after all, but this was hidden from the users.y contained AIII versions too! Well, well, well! Here was another item AIII users were not being told existed. Reading through the revised sections describing the Pascal versions of Elems, I found much to my delight that both the trig fun