home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-01-04 | 46.5 KB | 2,127 lines |
- */beginfile BASIC1_asm
- ; --------------------------------------------------------------
- ; BASIC1_asm - The BASIC interpreter
- ; - last modified 06/09/95
- ; QDOS-Amiga sources by Rainer Kowallik
- ; ...latest changes by Mark J Swift
- ; --------------------------------------------------------------
- L04A74:
- BAS_STARt:
- bra.s BEG_BAS
- L04A76:
- LINK_IN_eprom:
- CMPI.L #$4AFB0001,(A3)
- BNE.S L04A9E
- LEA 8(A3),A1 ;Eprom copyright
- JSR UT_MTEXT(PC) ;*/undomodify BSR UT_MTEXT
- MOVE.W 4(A3),D0 ;any Basic extensions ?
- BEQ.S L04A94
- LEA 0(A3,D0.W),A1
- JSR BP_INIT(PC) ;*/undomodify BSR BP_INIT
- L04A94:
- MOVE.W 6(A3),D0 ;initialization procedure
- BEQ.S L04A9E
- JSR 0(A3,D0.W) ;routine must not corrupt
- ;output channel (a0) or
- ;start address (a3) and
- ;must return whilst in
- ;USER mode
- L04A9E:
- RTS
- ; --------------------------------------------------------------
- OPEN_CON_asd4:
- JSR UT_CON(PC) ;*/undomodify BSR UT_CON
- ;open console window
- MOVE.L D4,D1 ;restore channel number
- ;(not ID)
- JMP STO_CHID(PC) ;*/undomodify BRA STO_CHID
- ;store Channel ID as #(D1)
- ; --------------------------------------------------------------
- ; Start basic initialization
- ; --------------------------------------------------------------
- BEG_BAS:
- JSR L0566E(PC) ;*/undomodify BSR L0566E
- ;initialize Basic variable
- ;area
- ; --------------------------------------------------------------
- GETPROCS:
- JSR L06DA2(PC) ;*/undomodify BSR L06DA2
- ;BP_INIT for initial
- ;procedures
- lea WININIT0(pc),a1
- moveq #0,d4
- bsr.s OPEN_CON_asd4 ;init window #0
- ; --------------------------------------------------------------
- ;*/beginoverlay
-
- ; Link in ROM at $1F400
- move.l #$1F400,a3
- bsr.s LINK_IN_eprom
- ; --------------------------------------------------------------
- ; Link in other ROMs
- CK_C0000:
- ; --------------------------------------------------------------
- lea $C000,a3 ;*/modify MOVE.L #$C0000,A3
- L04AC8:
- bsr.s LINK_IN_eprom
- adda.w #$100,a3 ;*/modify ADDA.W #$4000,A3
- cmpa.l #$10000,a3 ;*/cmpa.l #$100000,a3
- ;*/endoverlay
- ; --------------------------------------------------------------
- blt.s L04AC8
- ; --------------------------------------------------------------
- ; Initialise Copyright window
- CPYRIT:
- lea WININIT1(pc),a1
- moveq #1,d4
- bsr.s OPEN_CON_asd4 ;init window #1
- moveq #-$19,d0 ;copyright message
- JSR UT_ERR(PC) ;*/undomodify bsr UT_ERR
- ; --------------------------------------------------------------
- ; Initialise F1/F2 window
- L04AE4:
- F1F2:
- lea WININIT2(pc),a1
- moveq #2,d4
- bsr.s OPEN_CON_asd4 ;init window #2
- moveq #-$18,d0 ;F1/F2 message
- JSR UT_ERR(PC) ;*/undomodify bsr UT_ERR
- ; --------------------------------------------------------------
- ; Get a key press
- GETMOD:
- moveq #1,d0
- moveq #-1,d3 ;timeout
- trap #3 ;inkey$
- ; --------------------------------------------------------------
- ; Sort out mode number
- MOVEQ #0,D6 ;initially 4 colour mode
- MOVEQ #0,D7 ;monitor
- moveq #$20,d5 ;displacement
- subi.b #$E8,d1 ;F1
- beq.s INIMON
- subq.b #$4,d1 ;F2
- bne.s GETMOD
- moveq #8,d6
- moveq #1,d7
- moveq #$44,d5
- ; --------------------------------------------------------------
- ; Set screen mode
- INIMON MOVE.B D6,D1
- MOVE.B D7,D2
- MOVEQ #$10,D0 ;MT.DMODE sets the display
- TRAP #1 ;mode
- ; --------------------------------------------------------------
- ; redefine relevant windows
- lea WIN_MON0-$08(pc,d5.w),a1
- bsr.s L04B6E
- movea.l #$00010001,a0 ;special ID for channel #1
- lea WIN_MON0-$14(pc,d5.w),a1
- bsr.s L04B6E
- suba.l a0,a0 ;special ID for channel #0
- lea WIN_MON0-$20(pc,d5.w),a1
- bsr.s L04B6E
- ; --------------------------------------------------------------
- ; boot definition
- LEA BOOT(PC),A0 ;boot-definiton
- BSR.S L04B46 ;try boot on every device
- BEQ.S L04B40 ;success
- lea MDVBOOT(pc),a0 ;try mdv_boot
- BSR.S L04B46
- bne.s BAS_WARM ;failed
- L04B40:
- CLR.W $88(A6) ;clear line-number
- BRA.S L04B54
- L04B46 MOVEQ #1,D0 ;try to open boot
- MOVEQ #-1,D1
- MOVEQ #0,D3
- TRAP #2
- TST.L D0
- RTS
- L04B52:
- BAS_WARM:
- SUBA.L A0,A0 ;First input from #0
- L04B54:
- MOVE.L (A6),$04(A6) ;buffer base -> buffer
- ;running ptr
- MOVEQ #0,D7
- MOVEQ #$7E,D1
- JSR L04E6A(PC) ;*/undomodify BSR L04E6A
- MOVE.L A0,BV_COMCH(A6) ;Command channel
- LEA L04BF0(PC),A5
- MOVE.L A5,-(A7)
- JMP L04C04(PC) ;*/undomodify BRA L04C04
- ;try to execute line or
- ;prog
- L04B6E:
- JMP L03A02(PC) ;*/undomodify bra L03A02
- ; --------------------------------------------------------------
- ; Monitor mode #0
- ; --------------------------------------------------------------
- WIN_MON0:
- DC.B 0 ;Border colour
- DC.B 0 ;border with
- DC.B 0 ;paper / strip colour
- DC.B 4 ;ink colour
- DC.W $200 ;window width
- DC.W $32 ;window hight
- DC.W $0 ;X origin
- DC.W $CE ;Y origin
- ; --------------------------------------------------------------
- ; Monitor mode #1
- ; --------------------------------------------------------------
- WIN_MON1:
- DC.B $FF ;Border colour
- DC.B 1 ;border with
- DC.B 2 ;paper / strip colour
- DC.B 7 ;ink colour
- DC.W $100 ;window width
- DC.W $CA ;window hight
- DC.W $100 ;X origin
- DC.W $0 ;Y origin
- ; --------------------------------------------------------------
- ; Monitor mode #2
- ; --------------------------------------------------------------
- WIN_MON2:
- DC.B $FF ;Border colour
- DC.B 1 ;border with
- DC.B 7 ;paper / strip colour
- DC.B 2 ;ink colour
- DC.W $100 ;window width
- DC.W $CA ;window hight
- DC.W $0 ;X origin
- DC.W $0 ;Y origin
- ; --------------------------------------------------------------
- ; TV mode #0
- ; --------------------------------------------------------------
- WIN_TV0:
- DC.B 0 ;Border colour
- DC.B 0 ;border with
- DC.B 0 ;paper / strip colour
- DC.B 7 ;ink colour
- DC.W $1C0 ;window width
- DC.W $28 ;window hight
- DC.W $20 ;X origin
- DC.W $D8 ;Y origin
- ; --------------------------------------------------------------
- ; TV mode #1
- ; --------------------------------------------------------------
- WIN_TV1:
- DC.B 0 ;Border colour
- DC.B 0 ;border with
- DC.B 2 ;paper / strip colour
- DC.B 7 ;ink colour
- DC.W $1C0 ;window width
- DC.W $C8 ;window hight
- DC.W $20 ;X origin
- DC.W $10 ;Y origin
- ; --------------------------------------------------------------
- ; TV mode #2
- ; --------------------------------------------------------------
- WIN_TV2:
- DC.B 0 ;Border colour
- DC.B 0 ;border with
- DC.B 1 ;paper / strip colour
- DC.B 7 ;ink colour
- DC.W $1C0 ;window width
- DC.W $C8 ;window hight
- DC.W $20 ;X origin
- DC.W $10 ;Y origin
- ; --------------------------------------------------------------
- ; initialisation screen #0 for rom extension messages
- ; --------------------------------------------------------------
- WININIT0:
- DC.B 0 ;Border colour
- DC.B 0 ;border with
- DC.B 0 ;paper / strip colour
- DC.B 4 ;ink colour
- DC.W $1C0 ;window width
- DC.W $AA ;window hight
- DC.W $20 ;X origin
- DC.W $20 ;Y origin
- ; --------------------------------------------------------------
- ; initialisation screen #1 for copyright message
- ; --------------------------------------------------------------
- WININIT1:
- DC.B 7 ;Border colour
- DC.B 2 ;border with
- DC.B 2 ;paper / strip colour
- DC.B 7 ;ink colour
- DC.W $170 ;window width
- DC.W $E ;window hight
- DC.W $48 ;X origin
- DC.W $EE ;Y origin
- ; --------------------------------------------------------------
- ; initialisation screen #2 for F1/F2 message
- ; --------------------------------------------------------------
- WININIT2:
- DC.B 4 ;Border colour
- DC.B 4 ;border with
- DC.B 7 ;paper / strip colour
- DC.B 2 ;ink colour
- DC.W $A8 ;window width
- DC.W $1C ;window hight
- DC.W $AE ;X origin
- DC.W $CE ;Y origin
- ; --------------------------------------------------------------
- BOOT:
- DC.W 4
- DC.B 'BOOT'
- MDVBOOT:
- DC.W 9
- ; --------------------------------------------------------------
- ;*/beginoverlay
- DC.B 'MDV1_BOOT',0 ;*/undomodify DC.B 'FLP1_BOOT',0
- ;*/endoverlay
- ; --------------------------------------------------------------
- L04BF0 JSR L0A9BA(PC) ;*/undomodify BSR L0A9BA
- ;system command
- LEA L04BF0(PC),A5 ;address for errors
- MOVE.L A5,-(A7)
- L04BFA CLR.L BV_COMCH(A6) ;Command channel
- MOVEQ #0,D1
- JSR L0661E(PC) ;*/undomodify BSR L0661E
- L04C04 CLR.L BV_SSSAV(A6) ;Saved sp for
- ;out/mem to back to
- MOVE.L (A6),$04(A6) ;start of pointers ->
- ;buffer running ptr
- TST.B BV_AUTO(A6) ;AUTO/EDIT on ($FF) or off (0)
- BEQ.S L04C2C
- MOVE.W BV_EDLIN(A6),D4 ;line # to edit next
- MOVE.W D4,D6
- SF BV_PRINT(A6) ;Print from prtok ($ff)
- ;or leave in buffer
- JSR TKN_LIST(PC) ;*/undomodify BSR TKN_LIST
- MOVE.W BV_EDINC(A6),D0 ;Increment on edit range
- SNE BV_AUTO(A6) ;AUTO/EDIT on ($FF) or off (0)
- ADD.W D0,BV_EDLIN(A6) ;line # to edit next
- L04C2C MOVE.L A0,D0
- JSR L079C4(PC) ;*/undomodify BSR L079C4
- BEQ.S L04C64
- BGT.S L04C3C
- CMPI.B #$F6,D0
- BEQ.S L04C50
- L04C3C SF BV_AUTO(A6) ;AUTO/EDIT on ($FF) or off (0)
- JSR L09B9C(PC) ;*/undomodify BSR L09B9C
- ;error report
- L04C44 BSR GET_CH0
- BEQ.S L04C4E
- MOVEQ #2,D0 ;IO.CLOSE close channel
- TRAP #2
- L04C4E BRA.S L04BFA
- L04C50 MOVEQ #2,D0 ;IO.CLOSE / close MDV1_BOOT
- TRAP #2
- CLR.L BV_COMCH(A6) ;set Command
- ;channel to 0
- TST.W BV_NXLIN(A6) ;line to execute ?
- BLT L04D6A ;No
- BRA L04D9E ;yes
- ; --------------------------------------------------------------
- */beginoverlay
- L04C64:
- ifd NoTas
- ;
- BSET #7,BV_BRK(A6) ;*/mend TAS BV_BRK(A6)
- ;There has been a
- ;break (0) or not ($80)
- MOVE.L A1,D1
- SUB.L (A6),D1
- SF $B9(A6) ;0 => No arrow key
- MOVE.B -$01(A6,A1.L),D0
- SUBI.B #$D0,D0
- BCS.S L04C86
- ST $B9(A6) ;FF => down arrow key
- BEQ.S L04C86
- NEG.B $B9(A6) ;*/modify MOVE.B #1,$B9(A6)
- ;1 => up arrow key
- endc
- ;
- ifnd NoTas
- ;
- TAS BV_BRK(A6)
- MOVE.L A1,D1
- SUB.L (A6),D1
- SF $B9(A6)
- MOVE.B -$01(A6,A1.L),D0
- SUBI.B #$D0,D0
- BCS.S L04C86
- ST $B9(A6)
- BEQ.S L04C86
- MOVE.B #$01,$00B9(A6)
- ;
- endc
- */endoverlay
- ; --------------------------------------------------------------
- L04C86:
- SUBQ.W #1,D1
- BLE L04C04
- CMPI.B #$20,-2(A6,A1.L)
- BNE.S L04C98
- SUBQ.W #1,A1
- BRA.S L04C86
- L04C98:
- MOVE.B #$A,-1(A6,A1.L)
- MOVE.L A1,BV_BFP(A6) ;buffer running ptr
- L04CA2:
- JSR INI_STCK(PC) ;*/undomodify BSR INI_STCK
- RLOC14 movea.l #(TB_LIST-ORGN),a2 ;*/modify LEA TB_LIST(PC),A2
- JSR ANA_SYNX(PC) ;*/undomodify BSR ANA_SYNX
- BEQ.S L04CD0
- BLT.S L04CB8
- JSR L097DC(PC) ;*/undomodify BSR L097DC
- BRA.S L04CA2
- L04CB8 ;error handling of direct commands
- TST.L BV_COMCH(A6) ;Command channel
- BNE.S L04CCC
- MOVEQ #-21,D0 ;Bad line error
- JSR L09B9C(PC) ;*/undomodify BSR L09B9C
- SUBQ.L #1,BV_BFP(A6) ;buffer running ptr
- BRA L04C2C ;edit offending line
- L04CCC ;error handling of direct input other channel than #0
- JSR COMP_ERR(PC) ;*/undomodify BSR COMP_ERR
- L04CD0 JSR FMT_LINE(PC) ;*/undomodify BSR FMT_LINE
- JSR STO_LINE(PC) ;*/undomodify BSR STO_LINE
- BRA.S L04D02 ;error
- SF BV_SING(A6) ;Single line execution
- ;ON ($FF) or OFF (0)
- ST BV_EDIT(A6) ;program has been edited
- ;($ff) or not (0)
- MOVE.L D0,D5
- BSR.S GET_CH0
- BNE L04C04
- MOVEQ #$02,D1
- JSR L0661E(PC) ;*/undomodify BSR L0661E
- BLT.S L04CF6
- JSR L08FE6(PC) ;*/undomodify BSR L08FE6
- L04CF6 BRA L04BFA
- GET_CH0 ;get input channel
- MOVEA.L BV_COMCH(A6),A0 ;Command channel
- MOVE.L A0,D0
- RTS
- L04D02 ;Supervisor for direct commands
- MOVEA.L BV_TKBAS(A6),A4 ;token list
- MOVE.B #1,BV_STMNT(A6) ;current statement on line
- SF BV_INLIN(A6) ;Processing inline clause
- ST BV_CONT(A6) ;continue ($80) or stop (0)
- L04D14 ST BV_SING(A6) ;Single line execution
- ;ON ($FF) or OFF (0)
- CLR.L BV_LINUM(A6) ;current line #
- JSR L0A4BA(PC) ;*/undomodify BSR L0A4BA
- JSR L0A8B8(PC) ;*/undomodify BSR L0A8B8
- BNE L04C44
- TST.B BV_COMLN(A6) ;Command line saved ($ff)
- ;or not (0)
- BEQ.S L04D5E
- SUBQ.W #4,BV_STOPN(A6) ;which stop number set
- BEQ.S L04CF6
- BLT.S L04D14
- MOVEA.L BV_TKBAS(A6),A0 ;token list
- MOVE.L BV_TKP(A6),D0 ;token list running ptr
- SUBA.L A0,A4
- SUB.L A0,D0
- MOVE.L D0,D1
- SUBA.L D0,A7
- L04D46 MOVE.W 0(A6,A0.L),(A7)+
- ADDQ.W #2,A0
- SUBQ.W #2,D1
- BGT.S L04D46
- SUBA.L D0,A7
- MOVE.W D0,-(A7)
- MOVE.W A4,-(A7)
- MOVE.B BV_STMNT(A6),-(A7) ;current statement on line
- MOVE.L BV_INLIN(A6),-(A7) ;Processing inline clause
- L04D5E TST.W BV_NXLIN(A6) ;which line # to start after
- BGE.S L04D98
- BSR.S GET_CH0
- L04D66 BNE L04C04
- L04D6A TST.B BV_COMLN(A6) ;Command line saved ($ff)
- ;or not (0)
- BEQ.S L04CF6
- SF BV_COMLN(A6) ;Command line saved ($ff)
- ;or not (0)
- MOVE.L (A7)+,BV_INLIN(A6) ;Processing inline clause
- MOVE.B (A7)+,BV_STMNT(A6) ;current statement on line
- MOVEA.L BV_TKBAS(A6),A0 ;token list
- MOVEA.L A0,A4
- ADDA.W (A7)+,A4
- MOVE.W (A7)+,D0
- L04D86 MOVE.W (A7)+,0(A6,A0.L)
- ADDQ.W #2,A0
- SUBQ.W #2,D0
- BGT.S L04D86
- MOVE.L A0,BV_TKP(A6) ;token list running ptr
- BRA L04D14
- L04D98 ;execution of BASIC progs
- BSR GET_CH0 ;get channel ID
- BNE.S L04D66 ;not #0
- L04D9E JSR L0A4BA(PC) ;*/undomodify BSR L0A4BA
- ;init variables and procs
- MOVEA.L BV_PFBAS(A6),A4 ;program file
- SF BV_SING(A6) ;Single line execution
- ;ON ($FF) or OFF (0)
- CLR.L BV_LINUM(A6) ;current line #
- MOVE.B #1,BV_STMNT(A6) ;current statement on line
- MOVE.W BV_NXLIN(A6),D4 ;Which line # to start after
- BEQ.S L04DD6
- JSR L09FBE(PC) ;*/undomodify BSR L09FBE
- BNE L04BFA
- MOVE.B BV_NXSTM(A6),D4 ;statement to start after
- BEQ.S L04DD6
- JSR L0A96A(PC) ;*/undomodify BSR L0A96A
- ;first instruction in line
- JSR L0A00A(PC) ;*/undomodify BSR L0A00A
- L04DD0 JSR L0A90C(PC) ;*/undomodify BSR L0A90C
- ;execute programm
- BRA.S L04DDA
- L04DD6 JSR L0A8A8(PC) ;*/undomodify BSR L0A8A8
- ;execute programm
- L04DDA BNE L04BFA ;error or end
- TST.W BV_STOPN(A6) ;which stop number set
- ;/ system command ?
- BNE L04D5E ;no
- BRA.S L04DD0 ;continue
- ; reserve memory for name table entry !!! only once needed !!!
- L04DE8:
- JSR L04E5E(PC) ;*/undomodify BSR.S L04E5E
- ;*/undomodify nop
- MOVEA.L BV_NTP(A6),A2 ;name table running ptr
- ADDQ.L #8,BV_NTP(A6)
- RTS
- ; reserve memory for variables
- L04DF6:
- MOVE.L D1,-(A7)
- ADDQ.L #7,D1
- ANDI.W #$FFF8,D1
- L04DFE MOVEA.W #$72,A0 ;first free space in
- ;vvtable
- MOVEQ #$0C,D0 ;MT.ALLOC allocates an area
- ;in a heap
- TRAP #1
- TST.L D0
- BLT.S L04E0C ;not enough memory
- BRA.S L04E26
- L04E0C MOVE.L D1,-(A7)
- JSR L04E76(PC) ;*/undomodify MOVEQ #$2C,D2
- ;*/undomodify BSR.S L04E84
- MOVEA.L BV_VVP(A6),A0 ;variable values running ptr
- ADD.L D1,BV_VVP(A6) ;variable values running ptr
- MOVEA.W #$72,A1 ;basic variable value area
- MOVEQ #$0D,D0 ;MT.LNKFR link space back
- ;into heap
- TRAP #$01
- MOVE.L (A7)+,D1
- BRA.S L04DFE
- L04E26 MOVE.L (A7)+,D1
- RTS
- ; table for memory reservation
- ; ...changed to improve EPROM initialisation
- L04E2A:
- DC.W $100 ;*/undomodify DC.L $200
- DC.W $100 ;*/undomodify DC.L $200
- DC.W $100 ;*/undomodify DC.L $200
- DC.W $100 ;*/undomodify DC.L $200
- ; !!! table above and command below are fuzzy.
- ; in all cases same amount of memory is reserved so it can be
- ; shortened - instead of first four lines, only move.l #$0100,d1
- ; would be sufficient !
- L04E32 LEA L04E2A(PC),A1
- ADD.W D0,D0
- MOVEQ #0,D1
- MOVE.W 0(A1,D0.W),D1
- MOVEQ #$60,D2
- MOVE.L A7,BV_SSP(A6) ;system stack
- MOVE.L A6,D0
- SUB.L D0,BV_SSP(A6) ;system stack
- BRA.S L04E90 ;reserve 256 bytes
- L04E4C MOVEQ #$20,D1 ;reserve 32 bytes
- ;arithmetic stack
- ; ------- vectored utility BV_CHRIX
- BV_CHRIX ;reserve space on arithmetic stack
- MOVEQ #$58,D2
- BRA.S L04E90
- L04E52 MOVEQ #$0C,D1 ;12 bytes on stack
- L04E54 MOVEQ #$48,D2
- BRA.S L04E90
- L04E58 MOVEQ #4,D1 ;reserve 4 bytes
- L04E5A MOVEQ #$50,D2
- BRA.S L04E90
- L04E5E MOVEQ #8,D1
- L04E60 MOVEQ #$1C,D2 ;name table
- BRA.S L04E84
- L04E64 MOVEQ #$16,D1 ;20 bytes for
- MOVEQ #$3C,D2 ;return table
- BRA.S L04E84
- L04E6A MOVEQ #4,D2 ;buffer
- BRA.S L04E84
- L04E6E MOVEQ #$0C,D2 ;token list
- BRA.S L04E84
- L04E72 MOVEQ #$24,D2 ;Name list
- BRA.S L04E84
- L04E76 MOVEQ #$2C,D2 ;variable values
- BRA.S L04E84
- L04E7A MOVEQ #$34,D2
- BRA.S L04E84
- L04E7E MOVEQ #$44,D2
- BRA.S L04E84
- L04E82 MOVEQ #$14,D2
- L04E84 MOVEQ #0,D0
- MOVE.L 4(A6,D2.L),D3
- SUB.L 0(A6,D2.L),D3
- BRA.S L04E9A
- L04E90 ;reserve memory on base of stack
- MOVEQ #-1,D0
- MOVE.L 0(A6,D2.L),D3
- SUB.L -4(A6,D2.L),D3
- L04E9A CMP.L D1,D3 ;enough memory for
- ;reservation
- L04E9C BGE.S L04EE2
- MOVEM.L A0-A3,-(A7)
- ADDI.L #$F,D1
- ANDI.W #$FFF0,D1
- L04EAC MOVE.L BV_BTP(A6),D3 ;backtrack stack for parser
- SUB.L BV_LNP(A6),D3 ;line # running ptr
- CMP.L D1,D3
- BGT.S L04F14
- MOVEM.L D0-D2,-(A7)
- MOVEQ #$16,D0 ;MT.ALBAS allocate BASIC
- ;program area
- TRAP #1
- TST.L D0
- BEQ.S L04EE4
- MOVE.W #$12,BV_STOPN(A6) ;which stop number set
- TRAP #0
- MOVEA.L BV_SSBAS(A6),A5 ;system stack running ptr
- ADDA.L A6,A5
- SUBA.L BV_SSSAV(A6),A5 ;Saved sp for
- ;out/mem to back to
- SUBQ.W #4,A5
- MOVE.L A5,USP
- MOVE.W #4,SR
- SF BV_CONT(A6) ;continue ($80) or stop (0)
- L04EE2 RTS
- L04EE4 MOVEA.L BV_BTP(A6),A0 ;backtrack stack for parser
- MOVEA.L BV_SSBAS(A6),A1 ;system stack running ptr
- LEA 0(A1,D1.L),A2
- L04EF0 SUBQ.W #4,A2
- SUBQ.W #4,A1
- MOVE.L 0(A6,A1.L),0(A6,A2.L)
- CMPA.L A0,A1
- BGT.S L04EF0
- MOVEQ #$48,D0
- MOVEQ #$64,D2
- L04F02 ADD.L D1,0(A6,D0.L)
- ADDQ.W #4,D0
- CMP.L D2,D0
- BLE.S L04F02
- ADDA.L D1,A7
- MOVEM.L (A7)+,D0-D2
- BRA.S L04EAC
- L04F14 TST.B D0
- BMI.S L04F54
- CMPI.L #$44,D2
- BEQ.S L04F84
- MOVEA.L BV_LNP(A6),A1 ;line # running ptr
- MOVEA.L 4(A6,D2.L),A0
- LEA 0(A1,D1.L),A2
- L04F2C SUBQ.W #4,A1
- SUBQ.W #4,A2
- MOVE.L 0(A6,A1.L),0(A6,A2.L)
- CMPA.L A0,A1
- BGT.S L04F2C
- MOVEQ #4,D0
- ADD.W D2,D0
- MOVEQ #$48,D2
- TST.L BV_VVFREE(A6) ;First free space in vv tbl
- BEQ.S L04F7A
- CMPI.L #$28,D0
- BGT.S L04F7A
- ADD.L D1,BV_VVFREE(A6) ;First free space in vv tbl
- BRA.S L04F7A
- L04F54 CMPI.L #$00000048,D2
- BEQ.S L04F84
- MOVEA.L -$04(A6,D2.L),A1
- MOVEA.L BV_BTP(A6),A0 ;backtrack stack for parser
- NEG.L D1
- LEA 0(A0,D1.L),A2
- L04F6A MOVE.L 0(A6,A0.L),0(A6,A2.L)
- ADDQ.W #4,A0
- ADDQ.W #4,A2
- CMPA.L A1,A0
- BLE.S L04F6A
- MOVEQ #$48,D0
- L04F7A ADD.L D1,0(A6,D0.L)
- ADDQ.W #4,D0
- CMP.L D2,D0
- BLT.S L04F7A
- L04F84 MOVEM.L (A7)+,A0-A3
- RTS
- ; ------------------- END OF BV_CHRIX --------------------------
- L04F8A MOVEQ #$14,D2
- BRA.S L04FA0
- L04F8E MOVEQ #$24,D2
- BRA.S L04FA0
- L04F92 MOVEQ #$1C,D2
- BRA.S L04FA0
- L04F96 MOVEQ #$2C,D2
- BRA.S L04FA0
- L04F9A MOVEQ #$34,D2
- BRA.S L04FA0
- L04F9E MOVEQ #$3C,D2
- L04FA0 MOVEA.L $04(A6,D2.L),A1
- MOVE.L A1,D1
- MOVE.L 0(A6,D2.L),D0
- ADDQ.W #1,D0
- BCLR #0,D0
- MOVEA.L D0,A0
- SUB.L A0,D1
- BEQ.S L04FE6
- L04FB6 MOVE.L 0(A6,A1.L),0(A6,A0.L)
- ADDQ.W #4,A1
- ADDQ.W #4,A0
- CMPA.L BV_LNP(A6),A1 ;line # running ptr
- BLT.S L04FB6
- MOVEQ #$04,D0
- ADD.B D2,D0
- TST.L BV_VVFREE(A6) ;First free space in vv tbl
- BEQ.S L04FDA
- CMPI.B #$28,D2
- BGE.S L04FDA
- SUB.L D1,BV_VVFREE(A6) ;First free space in vv tbl
- L04FDA MOVEQ #$48,D2
- L04FDC SUB.L D1,0(A6,D0.L)
- ADDQ.B #4,D0
- CMP.B D2,D0
- BLT.S L04FDC
- L04FE6 RTS
- L04FE8 ADDQ.L #7,D1
- ANDI.L #$FFFFFFF8,D1
- BEQ.S L04FFA
- MOVEA.W #$72,A1 ;variable value area
- MOVEQ #$0D,D0 ;MT.LNKFR link free space
- ;back into heap
- TRAP #1
- L04FFA:
- RTS
- L04FFC:
- DC.W $4E75
- DC.W $0000
- ; --------------------------------------------------------------
- ;*/beginoverlay
- L05000:
- ; microdrive routines were here in JS ROM
- ;*/beginfilling
- NOP051B0:
- DCB.w ($51B0-(NOP051B0-ORGN))/2,$4E71
- ;*/endfilling
- L051B0:
- MD_WRITE:
- rts
- ;*/beginfilling
- NOP0523A:
- DCB.w ($523A-(NOP0523A-ORGN))/2,$4E71
- ;*/endfilling
- L0523A:
- MD_SECTR:
- rts
- ;*/beginfilling
- NOP0525C:
- DCB.w ($525C-(NOP0525C-ORGN))/2,$4E71
- ;*/endfilling
- L0525C:
- MD_READ:
- rts
- ;*/beginfilling
- NOP05262:
- DCB.w ($5262-(NOP05262-ORGN))/2,$4E71
- ;*/endfilling
- L05262:
- MD_VERIN:
- rts
- ;*/beginfilling
- NOP0566E:
- DCB.w ($566E-(NOP0566E-ORGN))/2,$4E71
- ;*/endfilling
- ;*/endoverlay
- ; --------------------------------------------------------------
- ; initialize BASIC pointers
- L0566E:
- SUBA.L A3,A3
- MOVEQ #$48,D0
- L05672:
- MOVE.L #$100,0(A6,A3.L)
- ADDQ.W #4,A3
- CMPA.W D0,A3
- BLT.S L05672
- MOVEQ #$64,D0
- L05682 MOVE.L A5,0(A6,A3.L)
- ADDQ.W #4,A3
- CMPA.W D0,A3
- BLE.S L05682
- SF BV_INLIN(A6) ;Processing inline clause
- ST BV_CONT(A6) ;continue ($80) or stop (0)
- ST $82(A6) ;
- SF BV_AUTO(A6) ;AUTO/EDIT on ($FF) or off (0)
- ST BV_PRINT(A6) ;Print from prtok ($ff)
- ;or leave in buffer
- MOVE.W #$FFFF,BV_NXLIN(A6) ;Which line # to start after
- MOVE.L #-1,$CA(A6) ;
- MOVEQ #0,D0
- MOVE.W D0,$C8(A6) ;
- MOVE.L D0,BV_COMCH(A6) ;Command channel
- MOVE.L D0,BV_VVFREE(A6) ;First free space in vv tbl
- JSR L04E32(PC) ;*/undomodify BSR L04E32
- ;allocate memory
- MOVEQ #$7E,D1 ;Memory to allocate
- JMP L04E6A(PC) ;*/undomodify BRA L04E6A
- L056C6 ;liberatee memory
- MOVEA.L BV_BTP(A6),A1 ;backtrack stack for parser
- MOVE.L A1,D1
- SUB.L BV_LNP(A6),D1 ;line # running ptr
- ANDI.L #$FFFFFE00,D1
- BEQ.S L05700
- MOVEA.L A1,A0
- SUBA.L D1,A0
- L056DC MOVE.L 0(A6,A1.L),0(A6,A0.L)
- ADDQ.W #4,A1
- ADDQ.W #4,A0
- CMPA.L BV_SSBAS(A6),A1 ;system stack running ptr
- BLT.S L056DC
- MOVEQ #$48,D0
- MOVEQ #$64,D2
- L056F0 SUB.L D1,0(A6,D0.L)
- ADDQ.B #4,D0
- CMP.B D2,D0
- BLE.S L056F0
- SUBA.L D1,A7
- MOVEQ #$17,D0 ;MT.REBAS release Basic
- ;program area (D1 bytes)
- TRAP #1
- L05700 RTS
- STO_VARValue ;store value of variable
- CMPA.L BV_NTP(A6),A5 ;name table running ptr
- BNE.S L0570C
- MOVE.L A3,BV_NTP(A6) ;name table running ptr
- L0570C CMPA.L A5,A3
- BGE L057EE
- ANDI.B #$0F,$01(A6,A3.L)
- BEQ.S L05778
- CMPI.W #$FFFF,$02(A6,A3.L)
- BNE.S L05728
- MOVEA.L A3,A2
- BSR.S L05784
- BRA.S L05778
- L05728 MOVEQ #$01,D0
- SUB.B 0(A6,A3.L),D0
- BGE.S L05778
- MOVE.W 2(A6,A3.L),D0
- LSL.L #3,D0 ;* 8
- MOVEA.L BV_NTBAS(A6),A2 ;name table
- ADDA.L D0,A2
- CMPI.B #3,0(A6,A2.L) ;Array ?
- BNE.S L0576C
- CMPI.B #2,0(A6,A3.L)
- BEQ.S L05778
- MOVEA.L 4(A6,A3.L),A0
- ADDA.L BV_VVBAS(A6),A0 ;variable values
- MOVEQ #0,D1
- MOVE.W 4(A6,A0.L),D1
- LSL.W #2,D1
- ADDQ.W #6,D1
- MOVEM.L D2/A1-A3,-(A7)
- JSR L04FE8(PC) ;*/undomodify BSR L04FE8
- MOVEM.L (A7)+,D2/A1-A3
- BRA.S L05778
- L0576C MOVE.L 4(A6,A3.L),4(A6,A2.L)
- MOVE.B 0(A6,A3.L),0(A6,A2.L)
- L05778 MOVE.L D7,0(A6,A3.L)
- MOVE.L D7,$04(A6,A3.L)
- ADDQ.W #8,A3
- BRA.S L0570C
- L05784 ;relaease memory that was occupied by a variable
- MOVEM.L D2/D4/D6/A1-A3,-(A7)
- MOVEA.L BV_VVBAS(A6),A0 ;variable values
- MOVE.L 4(A6,A2.L),D1
- BLT.S L057E8
- ADDA.L D1,A0
- MOVE.B 0(A6,A2.L),D0
- SUBQ.B #2,D0
- BLE.S L057C0
- SUBQ.B #1,D0
- BNE.S L057AC
- MOVE.L D1,D4
- MOVE.B $01(A6,A2.L),D6
- JSR L099FE(PC) ;*/undomodify BSR L099FE
- BRA.S L057E8
- L057AC SUBQ.B #3,D0
- BEQ.S L057BC
- SUBQ.B #1,D0
- BEQ.S L057B8
- MOVEQ #-$0C,D0
- BRA.S L057EA
- L057B8 MOVEQ #$1A,D1
- BRA.S L057DC
- L057BC MOVEQ #$0C,D1
- BRA.S L057DC
- L057C0 MOVE.B $01(A6,A2.L),D0
- SUBQ.B #2,D0
- BLT.S L057D2
- BEQ.S L057CE
- MOVEQ #$02,D1
- BRA.S L057DC
- L057CE MOVEQ #$06,D1
- BRA.S L057DC
- L057D2 MOVEQ #$03,D1
- ADD.W 0(A6,A0.L),D1
- BCLR #0,D1
- L057DC MOVE.L #$FFFFFFFF,$04(A6,A2.L)
- JSR L04FE8(PC) ;*/undomodify BSR L04FE8
- L057E8 MOVEQ #0,D0
- L057EA MOVEM.L (A7)+,D2/D4/D6/A1-A3
- L057EE RTS
- ; Basic operator & (append String)
- BAS_STRCat_op:
- MOVE.L A0,-(A7)
- MOVE.W 0(A6,A1.L),D0
- ADDQ.W #2,A1
- MOVEQ #0,D1
- MOVE.W D0,D1
- BEQ L0588A
- SWAP D0
- ADDQ.W #1,D1
- BCLR #0,D1
- MOVE.W D1,D0
- SUBA.L BV_RIBAS(A6),A1 ;arith stack running ptr
- MOVEM.L D0-D2/A1,-(A7)
- JSR L04DF6(PC) ;*/undomodify BSR L04DF6
- MOVEM.L (A7)+,D0-D2/A1
- ADDA.L BV_RIBAS(A6),A1 ;arith stack running ptr
- L0581E MOVE.W 0(A6,A1.L),0(A6,A0.L)
- ADDQ.W #2,A1
- ADDQ.W #2,A0
- SUBQ.W #2,D1
- BGT.S L0581E
- SUBA.W D0,A0
- MOVE.W 0(A6,A1.L),D2
- ADDQ.W #2,A1
- MOVEA.L A1,A2
- MOVE.W D2,D1
- ADDQ.W #1,D1
- BCLR #0,D1
- ADDA.W D1,A1
- MOVE.W D2,D1
- SWAP D0
- ADD.W D0,D1
- ADDQ.W #1,D1
- BMI.S L05890
- BCLR #0,D1
- SUBA.W D1,A1
- MOVE.W D2,D1
- BEQ.S L05862
- L05854 MOVE.B 0(A6,A2.L),0(A6,A1.L)
- ADDQ.W #1,A2
- ADDQ.W #1,A1
- SUBQ.W #1,D1
- BGT.S L05854
- L05862 ADD.W D0,D2
- MOVE.L D0,D1
- L05866 MOVE.B 0(A6,A0.L),0(A6,A1.L)
- ADDQ.W #1,A0
- ADDQ.W #1,A1
- SUBQ.W #1,D0
- BGT.S L05866
- SUBA.W D1,A0
- SUBA.W D2,A1
- SUBQ.W #2,A1
- MOVE.W D2,0(A6,A1.L)
- CLR.W D1
- SWAP D1
- MOVE.L A1,-(A7)
- JSR L04FE8(PC) ;*/undomodify BSR L04FE8
- MOVEA.L (A7)+,A1
- L0588A MOVEQ #0,D0
- L0588C MOVEA.L (A7)+,A0
- RTS
- L05890 ;joined string was too long
- LEA -2(A2),A1
- MOVE.W D0,D1
- MOVE.L A1,-(A7)
- JSR L04FE8(PC) ;*/undomodify BSR L04FE8
- MOVEA.L (A7)+,A1
- MOVEQ #-$12,D0
- BRA.S L0588C
- L058A2 DC.L $00020202,$02050505,$05050505,$03030302
- DC.L $01020202,$03030102,$02030200
- L058BE ANDI.B #$0F,-7(A6,A5.L)
- MOVEQ #0,D0
- MOVE.B L058A2(PC,D4.W),D0
- CMPI.B #$16,D4
- BGT L0598C
- ANDI.B #$0F,-$0F(A6,A5.L)
- CMP.B -$07(A6,A5.L),D0
- BEQ.S L05904
- CMPI.B #5,D0
- BNE.S L058FA
- MOVE.B -$07(A6,A5.L),D2
- CMP.B -$0F(A6,A5.L),D2
- BNE.S L058F8
- SUBQ.B #1,D2
- BNE.S L058F8
- SUBQ.W #8,A5
- L058F4 BRA L05992
- L058F8 MOVEQ #2,D0
- L058FA BSR L05996
- BNE L05994
- MOVE.B D2,D0
- L05904 SUBQ.W #8,A5
- CMP.B -$07(A6,A5.L),D0
- BEQ.S L058F4
- MOVE.B $01(A6,A5.L),D1
- SUBQ.B #2,D1
- BLT.S L0592A
- BEQ.S L0591E
- MOVE.W 0(A6,A1.L),-(A7)
- ADDQ.W #2,A1
- BRA.S L05946
- L0591E MOVE.L $02(A6,A1.L),-(A7)
- MOVE.W 0(A6,A1.L),-(A7)
- ADDQ.W #6,A1
- BRA.S L05946
- L0592A MOVEQ #$03,D2
- ADD.W 0(A6,A1.L),D2
- BCLR #0,D2
- SUBA.L D2,A7
- MOVE.L D2,D1
- SUBQ.W #1,D1
- L0593A MOVE.W 0(A6,A1.L),(A7)+
- ADDQ.W #2,A1
- SUBQ.W #2,D1
- BGE.S L0593A
- SUBA.L D2,A7
- L05946 MOVE.B D1,-(A7)
- MOVE.L A1,BV_RIP(A6) ;arith stack
- BSR.S L05996
- MOVE.B (A7)+,D2
- BLT.S L05968
- BEQ.S L0595C
- SUBQ.W #2,A1
- MOVE.W (A7)+,0(A6,A1.L)
- BRA.S L05980
- L0595C SUBQ.W #6,A1
- MOVE.W (A7)+,0(A6,A1.L)
- MOVE.L (A7)+,$02(A6,A1.L)
- BRA.S L05980
- L05968 MOVEQ #$03,D2
- ADD.W (A7),D2
- BCLR #0,D2
- SUBA.L D2,A1
- MOVE.L D2,D1
- L05974 MOVE.W (A7)+,0(A6,A1.L)
- ADDQ.W #2,A1
- SUBQ.W #2,D1
- BGT.S L05974
- SUBA.L D2,A1
- L05980 MOVE.L A1,BV_RIP(A6) ;arith stack
- TST.L D0
- BEQ.S L05994
- ADDQ.W #8,A5
- RTS
- L0598C ;single operator
- CMP.B -$07(A6,A5.L),D0
- BNE.S L05996
- L05992 MOVEQ #0,D0
- L05994 RTS
- L05996 ;convert variables
- MOVE.L D7,-(A7)
- MOVE.L A0,-(A7)
- MOVE.B D0,-(A7)
- MOVE.B -7(A6,A5.L),D2
- MOVEQ #$0F,D1
- AND.L D1,D0
- AND.L D1,D2
- SUB.B D2,D0
- BEQ.S L05A0A
- SUBQ.B #2,D2
- BLT.S L059DE
- BEQ.S L059C4
- ADDQ.B #1,D0
- BLT.S L059BA
- JSR RI_FLOAT(PC) ;*/undomodify BSR RI_FLOAT
- BRA.S L05A0A
- L059BA MOVEA.L (A6),A0
- JSR CN_ITOD(PC) ;*/undomodify BSR CN_ITOD
- BSR.S L05A20
- BRA.S L05A0A
- L059C4 TST.B D0
- BLT.S L059D4
- JSR RI_NINT(PC) ;*/undomodify BSR RI_NINT
- MOVE.B #$03,-$07(A6,A5.L)
- BRA.S L05A0A
- L059D4 MOVEA.L (A6),A0
- JSR CN_FTOD(PC) ;*/undomodify BSR CN_FTOD
- BSR.S L05A20
- BRA.S L05A0A
- L059DE SUBQ.B #1,D0
- BLT.S L05A0A
- BEQ.S L059F0
- BSR.S L05A34
- MOVE.L A0,-(A7)
- ADDQ.W #2,A0
- JSR CN_DTOI(PC) ;*/undomodify BSR CN_DTOI
- BRA.S L059FA
- L059F0 BSR.S L05A34
- MOVE.L A0,-(A7)
- ADDQ.W #2,A0
- JSR CN_DTOF(PC) ;*/undomodify BSR CN_DTOF
- L059FA MOVEA.L (A7)+,A0
- MOVE.L D0,-(A7)
- BSR.S L05A66
- MOVE.L (A7)+,D0
- BEQ.S L05A0A
- SUBQ.W #2,A1
- CLR.W 0(A6,A1.L)
- L05A0A MOVE.B (A7)+,D2
- MOVEA.L (A7)+,A0
- MOVE.L (A7)+,D7
- MOVE.L A1,BV_RIP(A6) ;arith stack
- TST.L D0
- BNE.S L05A1E
- MOVE.B D2,-$07(A6,A5.L)
- MOVEQ #0,D0
- L05A1E RTS
- L05A20 ;copy ASCII on arithmetic stack
- MOVE.L A1,BV_RIP(A6) ;arith stack
- MOVE.L A4,-(A7)
- MOVE.L A0,D1
- MOVEA.L (A6),A4
- SUB.L A4,D1
- JSR L05F88(PC) ;*/undomodify BSR L05F88
- MOVEA.L (A7)+,A4
- BRA.S L05A62
- L05A34 ;copy ASCII in variables zone
- MOVEQ #3,D1
- ADD.W 0(A6,A1.L),D1
- BCLR #0,D1
- JSR L04DF6(PC) ;*/undomodify BSR L04DF6
- MOVEA.L BV_RIP(A6),A1 ;arith stack
- MOVE.L A0,-(A7)
- L05A48 MOVE.W 0(A6,A1.L),0(A6,A0.L)
- ADDQ.W #2,A0
- ADDQ.W #2,A1
- SUBQ.L #2,D1
- BGT.S L05A48
- MOVEA.L (A7)+,A0
- MOVE.L A0,D7
- MOVEQ #$02,D1
- ADD.W 0(A6,A0.L),D1
- ADD.L D1,D7
- L05A62 MOVEQ #0,D0
- RTS
- L05A66 ;handling of expression after variable, function or
- ;instruction
- MOVE.L A1,-(A7)
- MOVEQ #$03,D1
- ADD.W 0(A6,A0.L),D1
- BCLR #0,D1
- JSR L04FE8(PC) ;*/undomodify BSR L04FE8
- MOVEA.L (A7)+,A1
- RTS
- MOVEQ #1,D0
- BRA.S L05A84
- L05A7E MOVEQ #2,D0
- BRA.S L05A84
- L05A82 MOVEQ #3,D0
- L05A84 MOVE.B D0,-(A7)
- BSR.S L05AA0
- BNE.S L05A9A
- MOVE.B (A7),D0
- BNE.S L05A90
- MOVEQ #1,D0
- L05A90 JSR L05996(PC) ;*/undomodify BSR L05996
- SUBQ.L #8,A5
- MOVE.L A5,BV_NTP(A6) ;name table running ptr
- L05A9A ADDQ.W #2,A7
- TST.L D0
- RTS
- L05AA0 BSR.S L05ABA
- BNE.S L05AA8
- BSR L05EC8
- L05AA8 RTS
- L05AAA:
- DC.B L05AF4-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05AF8-L05AF4
- DC.B L05B78-L05AF4
- DC.B L05B8C-L05AF4
- DC.B L05BAC-L05AF4
- DC.B L05BB6-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05BB2-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05B08-L05AF4
- DC.B L05AF4-L05AF4
- L05ABA MOVEA.L $1C(A6),A5 ;base of resident procedure
- ;area
- MOVE.L A5,-(A7)
- MOVEM.L D4-D6,-(A7)
- ST -(A7)
- MOVEQ #$40,D1
- JSR L04E60(PC) ;*/undomodify BSR L04E60
- ;allocate 64 byte for name
- ;table
- MOVEQ #2,D0
- JSR L04E32(PC) ;*/undomodify BSR L04E32
- ;allocate memory
- BRA.S L05ADC
- L05AD4 MOVEQ #1,D6
- BRA.S L05ADE
- L05AD8 ST D6
- BRA.S L05ADE
- L05ADC SF D6
- L05ADE MOVEQ #$7F,D4
- AND.B 0(A6,A0.L),D4
- CMPI.B #$70,D4
- BGE L05C58
- MOVE.B L05AAA(PC,D4.W),D4
- JMP L05AF4(PC,D4.W)
- L05AF4:
- ADDQ.W #2,A0
- BRA.S L05ADE
- L05AF8:
- MOVE.B 1(A6,A0.L),D4
- CMPI.B #5,D4
- BEQ.S L05B0E
- CMPI.B #1,D4
- BEQ.S L05B72
- L05B08:
- MOVEQ #0,D5
- BRA BAS_OPERators
- L05B0E ADDQ.W #2,A0
- TST.B D6
- BEQ.S L05B42
- BGT L05BAC
- CMPI.B #3,-8(A6,A5.L)
- BEQ.S L05B28
- JSR L063D0(PC) ;*/undomodify BSR L063D0
- BNE.S L05B2C
- BRA.S L05AD8
- L05B28 JSR L06272(PC) ;*/undomodify BSR L06272
- L05B2C BNE L05CA2
- CMPI.B #3,-8(A6,A5.L)
- BEQ.S L05AD8
- L05B38 CMPI.B #1,-7(A6,A5.L)
- BEQ.S L05AD8
- BRA.S L05AD4
- L05B42 BSR L05AA0
- BNE L05CA2
- CMPI.W #$8406,0(A6,A0.L)
- BNE.S L05BAC
- ADDQ.W #2,A0
- BRA.S L05B38
- L05B56 ;table of priorities of arithmetic operations
- DC.L $00050506,$06040404,$04040404,$01020107
- DC.L $09010201,$0606080B,$0B030300
- L05B72:
- MOVE.W #$8508,0(A6,A0.L)
- L05B78:
- TST.B D6
- BEQ.S L05BAC
- MOVE.B 1(A6,A0.L),D4
- ADDQ.W #2,A0
- MOVE.B L05B56(PC,D4.W),D5
- SWAP D4
- BRA BAS_OP_1lbl
- L05B8C:
- MOVEQ #$16,D4
- ADD.B 1(A6,A0.L),D4
- ADDQ.W #2,A0
- MOVE.B L05B56(PC,D4.W),D5
- BRA.S L05BA2
- L05B9A TST.B D5
- BEQ L05D06
- SWAP D4
- L05BA2 MOVE.B D5,-(A7)
- MOVE.B D4,1(A7)
- BRA L05ADC
- L05BAC:
- MOVEQ #-$11,D0 ;Error in expression
- BRA L05CA2
- L05BB2:
- BRA L05C6A
- L05BB6 ;*********** calling functions (basic and machinecode)
- ;******
- MOVEA.L BV_NTP(A6),A5 ;name table running ptr
- ADDQ.L #8,BV_NTP(A6) ;name table running ptr
- MOVEQ #0,D4
- MOVE.W 2(A6,A0.L),D4
- MOVE.L D4,D0
- ADDQ.W #4,A0
- LSL.L #3,D4
- MOVEA.L BV_NTBAS(A6),A3 ;name table
- ADDA.L D4,A3
- MOVE.B 0(A6,A3.L),D4
- CMPI.B #$09,D4 ;machine code function ?
- BEQ.S L05C0C
- CMPI.B #$05,D4 ;Basic function ?
- BEQ.S L05C12
- CMPI.B #8,D4 ;machinecode procedure
- BEQ.S L05BAC ;signal error in expression
- CMPI.B #4,D4 ;Basic procedure
- BEQ.S L05BAC ;signal error in expression
- MOVE.W 0(A6,A3.L),0(A6,A5.L)
- ANDI.B #$0F,1(A6,A5.L)
- MOVE.W D0,2(A6,A5.L)
- MOVE.L 4(A6,A3.L),4(A6,A5.L)
- ADDQ.W #8,A5
- SUBQ.B #3,D4
- BEQ.S L05C1E
- BRA L05C94
- L05C0C JSR CAL_FN68k(PC) ;*/undomodify BSR CAL_FN68k
- BRA.S L05C16
- L05C12 JSR CAL_FNBAs(PC) ;*/undomodify BSR CAL_FNBAs
- L05C16 BNE L05CA2
- BRA L05AD4
- L05C1E MOVEQ #0,D1
- MOVE.L -4(A6,A5.L),D0
- BLT.S L05BAC
- MOVEA.L BV_VVBAS(A6),A3 ;variable values
- ADDA.L D0,A3
- MOVE.W 4(A6,A3.L),D1
- LSL.W #2,D1
- ADDQ.W #6,D1
- MOVE.L A3,-(A7)
- BSR L05FC2
- MOVEA.L (A7)+,A3
- MOVE.L A2,D2
- SUB.L BV_VVBAS(A6),D2 ;variable values
- MOVE.L D2,-4(A6,A5.L)
- L05C46 MOVE.W 0(A6,A3.L),0(A6,A2.L)
- ADDQ.W #2,A3
- ADDQ.W #2,A2
- SUBQ.W #2,D1
- BNE.S L05C46
- BRA L05AD8
- L05C58 MOVEA.L A0,A4
- BSR L05F6C
- ADDQ.W #6,A0
- ANDI.B #$0F,0(A6,A1.L)
- MOVEQ #$02,D4
- BRA.S L05C76
- L05C6A ADDQ.W #2,A0
- MOVEA.L A0,A4
- BSR L05F80
- MOVEA.L A4,A0
- MOVEQ #$01,D4
- L05C76 MOVEA.L BV_NTP(A6),A5 ;name table running ptr
- ADDQ.L #8,BV_NTP(A6) ;name table running ptr
- MOVE.B #1,0(A6,A5.L)
- MOVE.B D4,1(A6,A5.L)
- MOVE.W #$FFFF,$02(A6,A5.L)
- CLR.L 4(A6,A5.L)
- ADDQ.W #8,A5
- L05C94 CMPI.B #1,-7(A6,A5.L)
- BEQ L05AD8
- BRA L05AD4
- L05CA2 TST.W (A7)+
- BGE.S L05CA2
- MOVEM.L (A7)+,D4-D6
- L05CAA CMPA.L (A7),A5
- BEQ.S L05CB4
- MOVEQ #1,D2
- BSR.S L05CBC
- BRA.S L05CAA
- L05CB4 MOVE.L A5,BV_NTP(A6) ;name table running ptr
- ADDQ.W #4,A7
- BRA.S L05D12
- L05CBC MOVE.B -8(A6,A5.L),D1
- SUBQ.B #1,D1
- BNE.S L05CEC
- SUBQ.B #2,-7(A6,A5.L)
- BLT.S L05CD6
- BGT.S L05CD0
- ADDQ.L #4,BV_RIP(A6) ;arith stack
- L05CD0 ADDQ.L #2,BV_RIP(A6) ;arith stack
- BRA.S L05CE8
- L05CD6 MOVEA.L BV_RIP(A6),A1 ;arith stack
- MOVEQ #3,D1
- ADD.W 0(A6,A1.L),D1
- BCLR #0,D1
- ADD.L D1,BV_RIP(A6) ;arith stack
- L05CE8 SUBQ.W #8,A5
- L05CEA RTS
- L05CEC TST.B D2
- BEQ.S L05CEA
- SUBQ.B #2,D1
- BNE.S L05CE8
- MOVE.L -4(A6,A5.L),D1
- BLT.S L05CE8
- MOVEA.L BV_VVBAS(A6),A3 ;variable values
- ADDA.L D1,A3
- BSR L05F30
- BRA.S L05CE8
- L05D06 MOVEQ #0,D0
- ADDQ.W #2,A7
- MOVEM.L (A7)+,D4-D6
- CMPA.L (A7)+,A5
- SEQ D0
- L05D12 TST.L D0
- RTS
- BAS_OPERators:
- TST.B (A7)
- BLE.S L05D06
- BAS_OP_1lbl:
- BSR L05EC8
- BAS_OP_2lbl:
- BNE.S L05CA2
- BAS_OP_Exe:
- CMP.B (A7),D5 ;interpret operators (+-*/^
- ;etc.)
- BGT L05B9A
- MOVE.W (A7)+,D4
- ANDI.W #$FF,D4
- JSR L058BE(PC) ;*/undomodify BSR L058BE
- BNE.S BAS_OP_2lbl
- MOVE.L A5,BV_NTP(A6) ;name table running ptr
- ADD.W D4,D4
- MOVE.W OP_JMP_Table(PC,D4.W),D4
- BEQ L05BAC
- MOVEQ #2,D0
- JSR OP_JMP_Table(PC,D4.W)
- BNE.S BAS_OP_2lbl
- MOVE.L A1,BV_RIP(A6) ;arith stack
- BRA.S BAS_OP_Exe
- OP_JMP_Table:
- DC.W OP_JMP_Table-OP_JMP_Table
- DC.W RI_ADD-OP_JMP_Table
- DC.W RI_SUB-OP_JMP_Table
- DC.W RI_MULT-OP_JMP_Table
- DC.W RI_DIV-OP_JMP_Table
- DC.W BAS_GE_Op-OP_JMP_Table
- DC.W BAS_GT_Op-OP_JMP_Table
- DC.W BAS_EQEq_op-OP_JMP_Table
- DC.W BAS_EQ_Op-OP_JMP_Table
- DC.W BAS_NE_Op-OP_JMP_Table
- DC.W BAS_LE_Op-OP_JMP_Table
- DC.W BAS_LT_Op-OP_JMP_Table
- DC.W BAS_BOR_op-OP_JMP_Table
- DC.W BAS_BAND_op-OP_JMP_Table
- DC.W BAS_BXOR_op-OP_JMP_Table
- DC.W RI_POWFP-OP_JMP_Table
- DC.W BAS_STRCat_op-OP_JMP_Table
- DC.W BAS_LOR_op-OP_JMP_Table
- DC.W BAS_LAND_op-OP_JMP_Table
- DC.W BAS_LXOR_op-OP_JMP_Table
- DC.W BAS_MOD_op-OP_JMP_Table
- DC.W BAS_DIV_op-OP_JMP_Table
- DC.W BAS_INSTr_op-OP_JMP_Table
- DC.W BAS_NOT_op-OP_JMP_Table
- DC.W L05E0C-OP_JMP_Table
- DC.W L05E84-OP_JMP_Table
- DC.W L05E54-OP_JMP_Table
- BAS_LT_Op ;Basic operator <
- BSR.S L05DAA
- BLT.S L05DF4
- BRA.S L05E04
- BAS_GT_Op ;Basic operator >
- BSR.S L05DAA
- BGT.S L05DF4
- BRA.S L05E04
- BAS_EQEq_op ;Basic operator == (used to be BAS_EQEQ_op - MJS)
- MOVEQ #3,D0
- BAS_EQ_Op ;Basic operator =
- BSR.S L05DAA
- BEQ.S L05DF4
- BRA.S L05E04
- BAS_GE_Op ;Basic operator >=
- BSR.S L05DAA
- BGE.S L05DF4
- BRA.S L05E04
- BAS_LE_Op ;Basic operator <=
- BSR.S L05DAA
- L05DA0 BLE.S L05DF4
- BRA.S L05E04
- BAS_NE_Op ;Basic operator <>
- BSR.S L05DAA
- BNE.S L05DF4
- BRA.S L05E04
- L05DAA CMPI.B #1,-7(A6,A5.L)
- BNE.S L05DCC
- MOVE.L A0,-(A7)
- BSR.S L05E16
- JSR UT_CSTR(PC) ;*/undomodify BSR UT_CSTR
- BSR.S L05E14
- LEA -6(A0),A1
- MOVE.B #2,-7(A6,A5.L)
- L05DC6 MOVEA.L (A7)+,A0
- TST.L D0
- RTS
- L05DCC MOVE.W D0,D4
- JSR RI_SUB(PC) ;*/undomodify BSR RI_SUB
- BNE.S L05DF0
- SUBQ.W #3,D4
- BEQ.S L05DDE
- TST.B 2(A6,A1.L)
- RTS
- L05DDE ADDQ.W #4,A7
- MOVE.W 0(A6,A1.L),D0
- BEQ.S L05DF4
- ADDI.W #$0018,D0
- SUB.W -6(A6,A1.L),D0
- BRA.S L05DA0
- L05DF0 ADDQ.W #4,A7
- RTS
- L05DF4 MOVE.W #$0801,0(A6,A1.L) ;Floatingpoint 1.0
- MOVE.L #$40000000,2(A6,A1.L)
- BRA.S L05E0C
- L05E04 CLR.W 0(A6,A1.L)
- CLR.L 2(A6,A1.L)
- L05E0C MOVEQ #0,D0
- RTS
- BAS_NOT_op:
- JMP RI_NEG(PC) ;*/undomodify BRA RI_NEG
- L05E14 MOVEA.L A0,A1
- L05E16 MOVE.W 0(A6,A1.L),D2
- ADDQ.W #3,D2
- BCLR #0,D2
- LEA 0(A1,D2.W),A0
- RTS
- BAS_INSTr_op ;Basic operator INSTR
- MOVEQ #1,D0
- MOVE.L A0,-(A7)
- BSR.S L05E16
- JSR L03A6E(PC) ;*/undomodify BSR L03A6E
- BSR.S L05E14
- LEA -2(A0),A1
- MOVE.B #3,-7(A6,A5.L)
- MOVE.W D1,0(A6,A1.L)
- BRA.S L05DC6
- BAS_LOR_op ;Basic operator Logical OR
- BSR.S L05E5C
- OR.B D1,D0
- BRA.S L05E58
- BAS_LAND_op ;Basic operator Logical AND
- BSR.S L05E5C
- AND.B D1,D0
- BRA.S L05E58
- BAS_LXOR_op ;Basic operator Logical XOR
- BSR.S L05E5C
- EOR.B D1,D0
- BRA.S L05E58
- L05E54 BSR.S L05E64
- NOT.B D0
- L05E58 BEQ.S L05E04
- BRA.S L05DF4
- L05E5C ADDQ.W #6,A1
- TST.L -$04(A6,A1.L)
- SNE D1
- L05E64 TST.L 2(A6,A1.L)
- SNE D0
- RTS
- BAS_BOR_op ;Basic || bitwise OR (used to be BAS_BOR_Op - MJS)
- BSR.S L05E8A
- OR.W D0,0(A6,A1.L)
- L05E72 BRA.S L05E0C
- BAS_BAND_op ;basic && bitwise AND
- BSR.S L05E8A
- AND.W D0,0(A6,A1.L)
- BRA.S L05E0C
- BAS_BXOR_op ;Basic ^^ bitwise EOR
- BSR.S L05E8A
- EOR.W D0,0(A6,A1.L)
- BRA.S L05E0C
- L05E84 NOT.W 0(A6,A1.L)
- BRA.S L05E0C
- L05E8A MOVE.W 0(A6,A1.L),D0
- L05E8E ADDQ.W #2,A1
- RTS
- BAS_MOD_op ;Basic operator MOD (used to be BAS_MOD_Op - MJS)
- BSR.S L05EA0
- MOVE.W D0,D3
- BRA.S L05E9A
- BAS_DIV_op ;Basic operator DIV (used to be BAS_DIV_Op - MJS)
- BSR.S L05EA0
- L05E9A MOVE.W D3,0(A6,A1.L)
- BRA.S L05E72
- L05EA0 MOVE.W $02(A6,A1.L),D0
- EXT.L D0
- MOVE.W 0(A6,A1.L),D1
- BEQ.S L05EC2
- MOVE.W D0,D2
- DIVS D1,D0
- MOVE.W D0,D3
- SWAP D0
- EOR.W D1,D2
- BPL.S L05E8E
- TST.W D0
- BEQ.S L05E8E
- ADD.W D1,D0
- SUBQ.W #1,D3
- BRA.S L05E8E
- L05EC2 MOVEQ #-$12,D0
- ADDQ.W #4,A7
- BRA.S L05E8E
- L05EC8 ANDI.B #$0F,-$07(A6,A5.L)
- MOVE.B -$08(A6,A5.L),D0
- BEQ.S L05EE8
- SUBQ.B #1,D0
- BEQ L05FB4
- SUBQ.B #2,D0
- BLT.S L05F42
- BEQ.S L05EF6
- SUBQ.B #3,D0
- BLT.S L05EE8
- SUBQ.B #1,D0
- BLE.S L05F42
- L05EE8 MOVEQ #$01,D2
- BSR L05CBC
- MOVE.L A5,BV_NTP(A6) ;name table running ptr
- MOVEQ #-$11,D0
- RTS
- L05EF6 MOVE.B -$07(A6,A5.L),D0
- SUBQ.B #1,D0
- BGT.S L05EE8
- MOVEA.L -$04(A6,A5.L),A3
- ADDA.L BV_VVBAS(A6),A3 ;variable values
- MOVEA.L 0(A6,A3.L),A4
- ADDA.L BV_VVBAS(A6),A4 ;variable values
- CMPI.W #$0001,$04(A6,A3.L)
- BGT.S L05EE8
- MOVE.B #$01,-$08(A6,A5.L)
- MOVE.B #$01,-$07(A6,A5.L)
- MOVEQ #0,D1
- MOVE.W $06(A6,A3.L),D1
- BSR.S L05F30
- TST.B D0
- BEQ.S L05F80
- BRA.S L05F88
- L05F30 MOVEM.L D0-D1/A0-A1,-(A7)
- MOVEA.L A3,A0
- MOVEQ #$0A,D1
- JSR L04FE8(PC) ;*/undomodify BSR L04FE8
- MOVEM.L (A7)+,D0-D1/A0-A1
- RTS
- L05F42 MOVE.B -$07(A6,A5.L),D0
- MOVE.L -$04(A6,A5.L),D1
- BLT.S L05EE8
- MOVE.B #$01,-$08(A6,A5.L)
- MOVEA.L D1,A4
- ADDA.L BV_VVBAS(A6),A4 ;variable values
- SUBQ.B #2,D0
- BLT.S L05F80
- BEQ.S L05F6C
- MOVEQ #$02,D1
- BSR.S L05FBC
- SUBQ.W #2,A1
- MOVE.W 0(A6,A4.L),0(A6,A1.L)
- BRA.S L05FB4
- L05F6C MOVEQ #$06,D1
- BSR.S L05FBC
- SUBQ.W #6,A1
- MOVE.L $02(A6,A4.L),$02(A6,A1.L)
- MOVE.W 0(A6,A4.L),0(A6,A1.L)
- BRA.S L05FB4
- L05F80 MOVEQ #0,D1
- MOVE.W 0(A6,A4.L),D1
- ADDQ.W #2,A4
- L05F88 MOVE.L D1,-(A7)
- ADDQ.L #3,D1
- BSR.S L05FBC
- MOVE.L (A7),D1
- BEQ.S L05FAC
- ADDQ.L #1,D1
- BCLR #0,D1
- MOVE.L D1,D0
- SUBA.L D0,A1
- L05F9C MOVE.B 0(A6,A4.L),0(A6,A1.L)
- ADDQ.W #1,A1
- ADDQ.W #1,A4
- SUBQ.L #1,D0
- BGT.S L05F9C
- SUBA.L D1,A1
- L05FAC SUBQ.W #2,A1
- ADDQ.W #2,A7
- MOVE.W (A7)+,0(A6,A1.L)
- L05FB4 MOVE.L A1,BV_RIP(A6) ;arith stack
- MOVEQ #0,D0
- RTS
- L05FBC JSR BV_CHRIX(PC) ;*/undomodify BSR BV_CHRIX
- BRA.S L05FCC
- L05FC2 MOVE.L A0,-(A7)
- JSR L04DF6(PC) ;*/undomodify BSR L04DF6
- MOVEA.L A0,A2
- MOVEA.L (A7)+,A0
- L05FCC MOVEA.L BV_RIP(A6),A1 ;arith stack
- RTS
- L05FD2 JSR L05ABA(PC) ;*/undomodify BSR L05ABA
- BNE.S L06048
- ANDI.B #$0F,-$07(A6,A5.L)
- MOVE.B -$08(A6,A5.L),D0
- CMPI.B #$01,D0
- BNE.S L06046
- MOVE.W #$FFFF,-$06(A6,A5.L)
- MOVE.B #$02,-$08(A6,A5.L)
- MOVE.B -$07(A6,A5.L),D0
- SUBQ.B #2,D0
- BLT.S L06018
- BEQ.S L06008
- MOVEQ #$02,D1
- BSR.S L0604A
- ADDQ.W #2,A2
- ADDQ.W #2,A1
- BRA.S L06042
- L06008 MOVEQ #$06,D1
- BSR.S L0604A
- MOVE.L $02(A6,A1.L),$02(A6,A2.L)
- ADDQ.W #6,A2
- ADDQ.W #6,A1
- BRA.S L06042
- L06018 MOVEQ #$03,D1
- ADD.W 0(A6,A1.L),D1
- BCLR #0,D1
- BSR.S L0604A
- MOVE.W 0(A6,A1.L),D1
- ADDQ.W #2,A1
- ADDQ.W #2,A2
- BEQ.S L06042
- ADDQ.W #1,D1
- BCLR #0,D1
- L06034 MOVE.W 0(A6,A1.L),0(A6,A2.L)
- ADDQ.W #2,A1
- ADDQ.W #2,A2
- SUBQ.W #2,D1
- BGT.S L06034
- L06042 MOVE.L A1,BV_RIP(A6) ;arith stack
- L06046 MOVEQ #0,D0
- L06048 RTS
- L0604A JSR L05FC2(PC) ;*/undomodify BSR L05FC2
- MOVE.L A2,D2
- SUB.L BV_VVBAS(A6),D2 ;variable values
- MOVE.L D2,-$04(A6,A5.L)
- MOVE.W 0(A6,A1.L),0(A6,A2.L)
- RTS
- CAL_FNBAs ;call BASIC function
- MOVEA.L A3,A2
- BSR.S L06094
- MOVE.B 1(A6,A2.L),-7(A6,A5.L)
- BSR.S L060A6
- BNE.S L06074
- ADDQ.W #2,A0
- MOVEQ #2,D5
- BRA.S L06076
- L06074:
- MOVEQ #3,D5
- L06076:
- MOVEA.L A0,A4
- MOVE.L D0,D4
- SUBA.L BV_TKBAS(A6),A0 ;token list
- MOVE.L A0,-(A7)
- LEA L04BFA(PC),A0 ;*/modify LEA L04BFA,A0
- nop ;*/modify
- MOVE.L A0,-(A7)
- ; --------------------------------------------------------------
- */beginoverlay
- LEA o0A8EA(PC),A0 ;*/modify LEA L0A8EA,A0
- nop ;*/filling
- */endoverlay
- ; --------------------------------------------------------------
- MOVE.L A0,-(A7)
- BRA L094CA
- ; initialize entry in name table
- L06094:
- CLR.W 0(A6,A5.L)
- MOVE.W #$FFFF,2(A6,A5.L)
- CLR.L 4(A6,A5.L)
- ADDQ.W #8,A5
- RTS
- L060A6 CMPI.B #$80,0(A6,A0.L)
- BNE.S L060B0
- ADDQ.W #2,A0
- L060B0 CMPI.W #$8405,0(A6,A0.L)
- RTS
- CAL_FN68k ;call machine code function
- BSR.S L06094
- MOVE.L A5,D0
- SUB.L BV_NTBAS(A6),D0 ;name table
- MOVE.L D0,-(A7)
- MOVE.L 4(A6,A3.L),-(A7)
- BSR.S L060A6
- BEQ.S L060CC
- BRA.S L060DE
- L060CC:
- ADDQ.W #2,A0
- JSR L0614A(PC) ;*/undomodify BSR.S L0614A
- ;*/undomodify nop
- BNE.S L06144
- CMPI.W #$8406,0(A6,A0.L)
- BNE.S L06142 ;error in expression
- ADDQ.W #2,A0
- L060DE:
- MOVEA.L (A7)+,A2
- MOVEA.L BV_NTBAS(A6),A3 ;name table
- MOVE.L A5,D0
- SUB.L A3,D0
- ADDA.L (A7),A3
- MOVE.L D0,-(A7)
- SUBA.L BV_TKBAS(A6),A0 ;token list
- MOVEA.L BV_RIP(A6),A1 ;arith stack
- SUBA.L BV_RIBAS(A6),A1 ;arith stack running ptr
- MOVEM.L D5-D7/A0-A1,-(A7)
- JSR (A2) ;call machinecode Function
- MOVE.L D0,D2 ;*********** Function
- ;return ***********
- MOVEM.L (A7)+,D5-D7/A0-A1
- ADDA.L BV_TKBAS(A6),A0 ;token list
- BEQ.S L06112
- ADDA.L BV_RIBAS(A6),A1 ;arith stack running ptr
- MOVE.L A1,BV_RIP(A6) ;arith stack
- L06112 MOVEA.L BV_RIP(A6),A1 ;arith stack
- MOVEA.L BV_NTBAS(A6),A5 ;name table
- MOVEA.L A5,A3
- ADDA.L (A7)+,A5
- ADDA.L (A7)+,A3
- MOVE.L A0,-(A7)
- MOVE.L A3,-(A7)
- JSR STO_VARValue(PC) ;*/undomodify BSR STO_VARValue
- MOVEA.L (A7)+,A5
- MOVE.L D2,D0
- BNE.S L06146
- MOVE.B D4,-7(A6,A5.L)
- MOVE.B #1,-8(A6,A5.L)
- CLR.L -4(A6,A5.L)
- MOVEA.L (A7)+,A0
- MOVEQ #0,D0
- RTS
- L06142 MOVEQ #-17,D0 ;error in expression
- L06144 ADDQ.W #4,A7
- L06146 ADDQ.W #4,A7
- RTS
- L0614A ;calculate and store value of a function
- MOVE.L D3,-(A7)
- MOVE.L D4,-(A7)
- SF D4
- L06150 JSR L05FD2(PC) ;*/undomodify BSR L05FD2
- BLT.S L061B6
- BGT.S L06162
- MOVE.B 0(A6,A0.L),D0
- MOVE.W 0(A6,A0.L),D1
- BRA.S L0618C
- L06162 MOVE.B 0(A6,A0.L),D0
- MOVE.W 0(A6,A0.L),D1
- CMPI.B #$8E,D0
- BEQ.S L0617C
- CMPI.W #$8403,D1
- BNE.S L061AA
- ST D4
- ADDQ.W #2,A0
- BRA.S L06150
- L0617C CLR.W 0(A6,A5.L)
- MOVE.W #$FFFF,$02(A6,A5.L)
- CLR.L $04(A6,A5.L)
- ADDQ.W #8,A5
- L0618C MOVE.L A5,BV_NTP(A6) ;name table running ptr
- CMPI.B #$8E,D0
- BNE.S L061AA
- TST.B D4
- BEQ.S L0619E
- BSET #$03,D1
- L0619E SF D4
- ADDQ.W #2,A0
- LSL.B #4,D1
- OR.B D1,-$07(A6,A5.L)
- BRA.S L06150
- L061AA TST.B D4
- BEQ.S L061B4
- BSET #$07,-$07(A6,A5.L)
- L061B4 MOVEQ #0,D0
- L061B6 MOVE.L (A7)+,D4
- MOVE.L (A7)+,D3
- TST.L D0
- RTS
- ; ------------------------------------------------------------
- ; Getting parameters for machinecode procedures
- ; the following routines check for one parameter only !
- ; ------------------------------------------------------------
- GET_INT2:
- BSR.S CA_GTINT
- BRA.S L061CC
- GET_INT4:
- BSR.S CA_GTLIN
- BRA.S L061CC
- GET_REAL:
- BSR.S CA_GTFP
- BRA.S L061CC
- GET_STR:
- BSR.S CA_GTSTR
- L061CC BNE.S L061D4
- SUBQ.W #1,D3
- BEQ.S L061D4
- MOVEQ #-15,D0 ;bad parameter error
- L061D4 RTS
- CA_GTSTR:
- MOVEQ #1,D0
- BRA.S L061E6
- CA_GTINT:
- MOVEQ #3,D0
- BRA.S L061E6
- CA_GTFP:
- MOVEQ #2,D0
- BRA.S L061E6
- CA_GTLIN:
- MOVEQ #5,D0
- ROR.L #1,D0 ;!!! Really neccessary ???
- ;!!!
- L061E6 MOVEM.L D5/A4-A5,-(A7)
- MOVE.L A3,-(A7)
- MOVE.L D0,-(A7)
- MOVEQ #0,D5
- L061F0 CMPA.L $0004(A7),A5
- BLE.S L06228
- MOVEQ #$0F,D6
- AND.B -$07(A6,A5.L),D6
- MOVE.B D6,-$07(A6,A5.L)
- JSR L05EC8(PC) ;*/undomodify BSR L05EC8
- BNE.S L0622A
- MOVE.L (A7),D0
- JSR L05996(PC) ;*/undomodify BSR L05996
- MOVE.B D6,-$07(A6,A5.L)
- TST.L D0
- BNE.S L0622A
- TST.L (A7)
- BPL.S L06222
- JSR L047AA(PC) ;*/undomodify BSR L047AA
- BNE.S L0622A
- MOVE.L A1,BV_RIP(A6) ;arith stack
- L06222 ADDQ.W #1,D5
- SUBQ.W #8,A5
- BRA.S L061F0
- L06228 MOVEQ #0,D0
- L0622A ADDQ.W #4,A7
- MOVE.L D5,D3
- MOVEA.L (A7)+,A3
- MOVEM.L (A7)+,D5/A4-A5
- TST.L D0
- RTS
- L06238 ;evaluate characteristics of a table
- ANDI.B #$0F,-7(A6,A5.L)
- MOVEA.L -4(A6,A5.L),A4
- ADDA.L BV_VVBAS(A6),A4 ;variable values
- MOVEA.L A4,A2
- MOVE.L 0(A6,A4.L),D6
- MOVE.W 4(A6,A4.L),D4
- ADDQ.W #6,A4
- RTS
- L06254 ;store the characteristics evaluated above
- SUBA.L BV_VVBAS(A6),A2 ;variable values
- SUBA.L BV_VVBAS(A6),A4 ;variable values
- MOVEM.L A2/A4-A5,-(A7)
- JSR L05A82(PC) ;*/undomodify BSR L05A82
- MOVEM.L (A7)+,A2/A4-A5
- ADDA.L BV_VVBAS(A6),A4 ;variable values
- ADDA.L BV_VVBAS(A6),A2 ;variable values
- RTS
- L06272 BSR.S L06238
- L06274 MOVEQ #0,D5
- BSR.S L06254
- BLT.S L062D0
- BEQ.S L06288
- CMPI.W #$8E05,0(A6,A0.L)
- BEQ.S L06292
- L06284 MOVEQ #-$11,D0
- BRA.S L062D0
- L06288 ADDQ.L #2,BV_RIP(A6) ;arith stack
- MOVE.W 0(A6,A1.L),D5
- BLT.S L062CE
- L06292 CMP.W 0(A6,A4.L),D5
- BGT.S L062CE
- MOVE.W D5,D0
- MULU 2(A6,A4.L),D0
- MOVE.B -7(A6,A5.L),D1
- SUBQ.B #2,D1
- BLT.S L062B0
- BEQ.S L062AC
- ADD.L D0,D0
- BRA.S L062B0
- L062AC MULU #6,D0
- L062B0 ADD.L D0,D6
- MOVEQ #0,D0
- MOVE.L D6,0(A6,A2.L)
- CMPI.W #$8E05,0(A6,A0.L)
- BNE.S L062E6
- ADDQ.W #2,A0
- BSR.S L06254
- BLT.S L062D0
- BEQ.S L062D4
- MOVE.W 0(A6,A4.L),D0
- BRA.S L062E2
- L062CE MOVEQ #-4,D0
- L062D0 BRA L063CE
- L062D4 ADDQ.L #2,BV_RIP(A6) ;arith stack
- MOVE.W 0(A6,A1.L),D0
- CMP.W 0(A6,A4.L),D0
- BGT.S L062CE
- L062E2 SUB.W D5,D0
- BLT.S L062CE
- L062E6 MOVE.W D0,0(A6,A4.L)
- ADDQ.W #4,A4
- SUBQ.W #1,D4
- BNE.S L0632A
- CMPI.B #$01,-$07(A6,A5.L)
- BGT.S L0632A
- BEQ.S L06308
- SUBQ.L #1,0(A6,A2.L)
- ADDQ.W #1,-$04(A6,A4.L)
- TST.W D5
- BEQ.S L062CE
- BRA.S L0632A
- L06308 CLR.B -$07(A6,A5.L)
- ADDQ.W #1,-$04(A6,A4.L)
- ADDQ.L #1,0(A6,A2.L)
- TST.W D5
- BNE.S L0632A
- TST.W D0
- BNE.S L062CE
- SUBQ.L #1,0(A6,A2.L)
- SUBQ.W #1,-$04(A6,A4.L)
- MOVE.B #3,-7(A6,A5.L)
- L0632A MOVE.W 0(A6,A0.L),D0
- ADDQ.W #2,A0
- CMPI.W #$8406,D0
- BEQ.S L06346
- CMPI.W #$8E01,D0
- BNE L06284
- TST.W D4
- BGT L06274
- BRA.S L062CE
- L06346 BSR L06238
- MOVEA.L (A6),A3
- MOVE.L 0(A6,A2.L),0(A6,A3.L)
- ADDQ.W #6,A3
- MOVEQ #0,D0
- L06356 TST.W 0(A6,A4.L)
- BEQ.S L06366
- MOVE.L 0(A6,A4.L),0(A6,A3.L)
- ADDQ.W #4,A3
- ADDQ.W #1,D0
- L06366 ADDQ.W #4,A4
- SUBQ.W #1,D4
- BGT.S L06356
- MOVEA.L (A6),A3
- MOVE.W D0,4(A6,A3.L)
- MOVE.W 4(A6,A2.L),D1
- LSL.L #2,D1
- ADDQ.W #6,D1
- MOVE.L A0,-(A7)
- MOVE.L A3,-(A7)
- MOVEA.L A2,A0
- JSR L04FE8(PC) ;*/undomodify BSR L04FE8
- MOVEA.L (A7)+,A3
- MOVEA.L (A7)+,A0
- MOVE.W $04(A6,A3.L),D1
- BGT.S L063A2
- TST.B -7(A6,A5.L)
- BEQ.S L063A2
- MOVE.L 0(A6,A3.L),-4(A6,A5.L)
- MOVE.B #2,-8(A6,A5.L)
- BRA.S L063CC
- L063A2 LSL.L #2,D1
- ADDQ.W #6,D1
- MOVE.L A0,-(A7)
- MOVE.L A3,-(A7)
- JSR L04DF6(PC) ;*/undomodify BSR L04DF6
- MOVEA.L A0,A2
- MOVEA.L (A7)+,A3
- MOVEA.L (A7)+,A0
- MOVE.L A2,D0
- SUB.L BV_VVBAS(A6),D0 ;variable values
- MOVE.L D0,-$04(A6,A5.L)
- L063BE MOVE.W 0(A6,A3.L),0(A6,A2.L)
- ADDQ.W #2,A3
- ADDQ.W #2,A2
- SUBQ.L #2,D1
- BGT.S L063BE
- L063CC MOVEQ #0,D0
- L063CE RTS
- L063D0 ;evaluate substring of type x$(4 TO 8)
- MOVEM.L D5-D6/A2/A4,-(A7)
- CMPI.B #1,-8(A6,A5.L)
- BEQ.S L063EE
- MOVE.L -4(A6,A5.L),D0
- BLT.S L063EA
- MOVEA.L BV_VVBAS(A6),A2 ;variable values
- ADDA.L D0,A2
- BRA.S L06404
- L063EA MOVEQ #-$11,D0
- BRA.S L0643E
- L063EE MOVE.L A0,-(A7)
- JSR L05A34(PC) ;*/undomodify BSR L05A34
- MOVEQ #0,D7
- MOVE.L A1,BV_RIP(A6) ;arith stack
- MOVEA.L A0,A2
- MOVEA.L (A7)+,A0
- MOVE.L A2,D0
- SUB.L BV_VVBAS(A6),D0 ;variable values
- L06404 MOVE.L D0,-(A7)
- BSR.S L06446
- MOVEA.L BV_VVBAS(A6),A2 ;variable values
- ADDA.L (A7)+,A2
- BNE.S L06420
- MOVEA.L A2,A4
- ADDQ.W #2,A4
- SUBQ.W #1,D5
- ADDA.W D5,A4
- MOVE.W D6,D1
- SUB.W D5,D1
- JSR L05F88(PC) ;*/undomodify BSR L05F88
- L06420 MOVE.L D0,-(A7)
- CMPI.B #1,-8(A6,A5.L)
- BNE.S L06434
- MOVE.L A0,-(A7)
- MOVEA.L A2,A0
- JSR L05A66(PC) ;*/undomodify BSR L05A66
- MOVEA.L (A7)+,A0
- L06434 MOVE.L (A7)+,D0
- BNE.S L0643E
- MOVE.B #$01,-$08(A6,A5.L)
- L0643E MOVEM.L (A7)+,D5-D6/A2/A4
- TST.L D0
- RTS
- L06446 MOVE.W 0(A6,A2.L),-(A7)
- JSR L05A82(PC) ;*/undomodify BSR L05A82
- BLT.S L06496
- BGT.S L0649E
- ADDQ.L #2,BV_RIP(A6) ;arith stack
- MOVE.W 0(A6,A1.L),D5
- BLE.S L0649E
- CMP.W (A7),D5
- BGT.S L0649E
- MOVE.W D5,D6
- CMPI.W #$8E05,0(A6,A0.L)
- BNE.S L06482
- ADDQ.W #2,A0
- JSR L05A82(PC) ;*/undomodify BSR L05A82
- BLT.S L06496
- BGT.S L06480
- ADDQ.L #2,BV_RIP(A6) ;arith stack
- MOVE.W 0(A6,A1.L),D6
- CMP.W (A7),D6
- BLE.S L06482
- L06480 MOVE.W (A7),D6
- L06482 MOVE.W D6,D0
- ADDQ.W #1,D0
- SUB.W D5,D0
- BLT.S L0649E
- CMPI.W #$8406,0(A6,A0.L)
- BNE.S L0649A
- ADDQ.W #2,A0
- MOVEQ #0,D0
- L06496 ADDQ.W #2,A7
- RTS
- L0649A MOVEQ #-17,D0 ;error in expression
- BRA.S L06496
- L0649E MOVEQ #-4,D0 ;out of range
- BRA.S L06496
- ; --------------------------------------------------------------
- ;*/endfile
-