home *** CD-ROM | disk | FTP | other *** search
- ; The stuff below is some pretty basic support and initialization, and
- ; should be replaced easily with the includes and macros used in your
- ; assembly system. I don't think you'll encounter many problems when
- ; trying to assemble this.
-
- OPT A-,M-,O+,O3-,OW-,I+,P+,S-,T+,W+,D-,X-
-
- ; Define global variable structure pointer
-
- GP EQUR A5
-
- ; Equs private to initialization code
-
- InitError EQU 100
- NormError EQU 20
-
- ; Some LVOs & equates (can be gotten by including dos*.i & arpbase.i etc.)
-
- _LVOArpAlloc EQU -384
- _LVOArpAllocMem EQU -390
- _LVOArpLock EQU -408
- _LVOArpOpen EQU -396
- _LVOAtol EQU -258
- _LVOCheckAbort EQU -270
- _LVOClose EQU -36
- _LVOCloseDevice EQU -450
- _LVOCloseLibrary EQU -414
- _LVODoIO EQU -456
- _LVODelay EQU -198
- _LVODeleteFile EQU -72
- _LVOExamine EQU -102
- _LVOForbid EQU -132
- _LVOFindPort EQU -390
- _LVOFindTask EQU -294
- _LVOGADS EQU -252
- _LVOInput EQU -54
- _LVOLock EQU -84
- _LVOOpen EQU -30
- _LVOOpenDevice EQU -444
- _LVOOpenLibrary EQU -552
- _LVOOpenWorkBench EQU -210
- _LVOOutput EQU -60
- _LVOPermit EQU -138
- _LVOPuts EQU -240
- _LVORawDoFmt EQU -522
- _LVORead EQU -42
- _LVOSeek EQU -66
- _LVOSetProtection EQU -186
- _LVOStamptoStr EQU -564
- _LVOStrcmp EQU -522
- _LVOUnLock EQU -90
- _LVOWBenchToFront EQU -342
- _LVOWrite EQU -48
-
- ACCESS_READ EQU -2
- ACCESS_WRITE EQU -1
- ArpVersion EQU 39
- ds_Days EQU 0
- ds_Minute EQU 4
- ds_Tick EQU 8
- fib_DateStamp EQU $84
- fib_SIZEOF EQU $104
- FORMAT_DOS EQU 0
- IO_COMMAND EQU $1C
- IOTV_SIZE EQU $28
- IOTV_TIME EQU $20
- LEN_DATSTRING EQU 10
- LN_NAME EQU $A
- MEMF_CLEAR EQU $10000
- MEMF_PUBLIC EQU 1
- MN_REPLYPORT EQU $E
- MODE_NEWFILE EQU $3EE
- MODE_OLDFILE EQU $3ED
- OFFSET_END EQU 1
- pr_MsgPort EQU $5C
- pr_WindowPtr EQU $B8
- RESIDENT_MAGIC EQU $4AFC
- ThisTask EQU $114
- TR_SETSYSTIME EQU $B
- TV_SECS EQU 0
-
- ; Negative structure building macros
-
- ALIGN MACRO
- soff SET soff-(soff&1)
- ENDM
-
- STRUCT MACRO
- soff SET soff-\2
- ALIGN
- \1 EQU soff
- ENDM
-
- LONG MACRO
- ALIGN
- soff SET soff-4
- \1 EQU soff
- ENDM
-
- WORD MACRO
- ALIGN
- soff SET soff-2
- \1 EQU soff
- ENDM
-
- BYTE MACRO
- soff SET soff-1
- \1 EQU soff
- ENDM
-
- SIZE MACRO
- ALIGN
- StrcSize EQU soff
- ENDM
-
- ; Define default variables.
-
- soff SET 0
- LONG ComLineBase
- LONG ComLineSize
- WORD ReturnCode
-
- ; This requires A6 to be set properly! Keep track carefully or reload A6
-
- CALL MACRO
- JSR _LVO\1(A6)
- ENDM
-
- ; This tells ARP's shell and resident how large a stack we require.
-
- STACK MACRO
- BRA.S ResStart
- DC.W RESIDENT_MAGIC
- DC.L \1
- DC.L 0
- ResStart:
- ENDM
-
- ; The big one.
-
- INIT MACRO
-
- ; Setup the stack structure (on stack for reentrability) (GP=A5, do not modify)
-
- LINK GP,#StrcSize
- MOVE.L SP,A1
- ClearStackStruct:
- CLR.W (A1)+
- CMP.L A1,GP
- BNE ClearStackStruct
-
- ; Initialize default variables
-
- MOVE.W #InitError,ReturnCode(GP)
- MOVE.L A0,ComLineBase(GP)
- MOVE.L D0,ComLineSize(GP)
-
- ; Try to open ARP
-
- MOVE.L $4.W,A6
- LEA ArpName(PC),A1
- MOVEQ #ArpVersion,D0
- CALL OpenLibrary
- TST.L D0
- BNE.S OpenedOK
-
- ; Report that the ARP library could not be opened.
-
- ; MOVEQ #0,D0 ; Already 0
- LEA DosName(PC),A1
- CALL OpenLibrary
- TST.L D0
- BEQ.S ThisIsHorrible
- MOVE.L D0,A6
- CALL Output
- MOVE.L D0,D1
- BEQ.S BackToDOS
- LEA LibErr(PC),A0
- MOVE.L A0,D2
- MOVEQ #StringEnd-LibErr,D3
- CALL Write
-
- ; Return to DOS
-
- BackToDOS:
- MOVE.L A6,A1
- MOVE.L $4.W,A6
- CALL CloseLibrary
- ThisIsHorrible:
- MOVE.W ReturnCode(GP),D0
- EXT.W D0
- UNLK GP
- RTS
-
- ; Support strings
-
- IFGE ArpVersion-100
- FAIL "Version > 3 digits"
- ENDC
-
- TMP SET ArpVersion/10
- DosName DC.B 'dos.library',0
- LibErr DC.B 'you need '
- ArpName DC.B 'arp.library',0,' V',TMP+'0',(ArpVersion-(TMP*10))+'0','+',10
- StringEnd:
- CNOP 0,2
-
- ; A6 = ARP base (Do not modify A6 if you use CALL), lower error level, call user.
-
- OpenedOK:
- MOVE.L D0,A6
- MOVE.W #NormError,ReturnCode(GP)
- BSR.S UserCode
- BRA BackToDOS
- UserCode:
- ENDM
-