Category : Utilities for DOS and Windows Machines
Archive   : SIT2.ZIP
Filename : STANDARD.ICL

 
Output of file : STANDARD.ICL contained in archive : SIT2.ZIP
.xlist

;STANDARD macros for use in 8086 assembly work, including

; 1) standard definitions of CR, LF, TAB, etc.

; 2) standard BIOS and DOS interrupt numbers

; 3) standard "extended" opcodes (far call, return, bit set/clear ops, etc.)

; 4) structured _IF/_ELSEIF/_ELSE/_ENDIF and _WHILE/_BREAK/_AGAIN/_UNTIL

;=============================================

; 1) standard definitions of CR, LF, TAB, ESCAPE etc.
cr equ 0dh
lf equ 0ah
tab equ 09h
escape equ 1bh
eot equ 4
ack equ 6
nak equ 21
bs equ 08h

;=============================================

; 2) standard BIOS and DOS interrupt numbers

;call to DOS function
dos macro
int 21h
endm

;BIOS video display services
video macro
int 10h
endm

;BIOS serial-port services
serial macro
int 14h
endm

;BIOS device control services
device macro
int 15h
endm

;BIOS "a key has been pressed" service
keypress macro
int 9h
endm

;BIOS "get a keystroke" services
keyboard macro
int 16h
endm

;BIOS printer services
printer macro
int 17h
endm

;BIOS once-a-tick user services
usertick macro
int 1ch
endm

;"DOS is doing an I/O function, may be interrupted for DOS calls > 0Ch" ticker
idler macro
int 28h
endm

;=============================================

; 3) standard "extended" opcodes (far call, return, bit set/clear ops, etc.)

;"far" call, jump
jmpf macro
db 0eah
endm

callf macro
db 09ah
endm

setbits macro target,bits
or target,bits
endm

clrbits macro target,bits
and target,not(bits)
endm

tstbits macro target,bits
test target,bits
endm

zero macro register
xor register,register
endm

;=============================================

; 4) structured _IF/_ELSEIF/_ELSE/_ENDIF and _WHILE/_BREAK/_AGAIN/_UNTIL

;"negated no condition" jump
jn macro target
jmp short target
endm

;"no condition" jump
j macro target
jmp short target
endm

;"Double-negative" conditional jumps
jnpo macro target
jpe target
endm

jnpe macro target
jpo target
endm

jnna macro target
ja target
endm

jnnae macro target
jae target
endm

jnnb macro target
jb target
endm

jnnbe macro target
jbe target
endm

jnnc macro target
jc target
endm

jnne macro target
je target
endm

jnng macro target
jg target
endm

jnnge macro target
jge target
endm

jnnl macro target
jl target
endm

jnnle macro target
jle target
endm

jnno macro target
jo target
endm

jnnp macro target
jp target
endm

jnns macro target
js target
endm

jnnz macro target
jz target
endm

jnncxz macro target
jcxz target
endm

; third-level macros to substitute jumps and jump targets
___jj macro cnd,target,depth
j&cnd target&depth
endm

___ll macro cnd,target,depth
loop&cnd target&depth
endm

___tt macro target,depth
target&depth:
endm

; second-level macros to substitute jumps and jump targets

___jn macro cnd,target,type,depth
___jj n&cnd,target,%&type&depth
endm

___j macro cnd,target,type,depth
___jj cnd,target,%&type&depth
endm

___l macro cnd,target,type,depth
___ll cnd,target,%&type&depth
endm

___t macro target,type,depth
___tt target,%&type&depth
endm

___makesym macro name,num,val
name&num = val
endm

;test to insure you're nesting structures correctly

___test macro depth,kind
if ___depth EQ 0
.ERR
%OUT >>> invalid nesting
exitm
endif
if kind NE ___type_&depth
.ERR
%OUT >>> invalid nesting
exitm
endif
endm

;find the innermost enclosing loop, if any
___findloopdepth macro trydepth
___loopdepth = trydepth
if trydepth LE 0
.ERR
%OUT >>> BREAK/AGAIN not within a loop
exitm
endif
if ___type_&trydepth NE 2
___loopdepth = ___loopdepth - 1
___findloopdepth %___loopdepth
endif
endm

;structured forms

_if macro op,cnd
___depth = ___depth+1
___targetcnt = ___targetcnt+1
___makesym ___type_,%___depth,1
___makesym ___end_,%___depth,___targetcnt
___makesym ___skip_,%___depth,___targetcnt
op
___jn cnd,_s_,___skip_,%___depth
endm

_elseif macro op,cnd
___test %___depth,1
___j ,_e_,___end_,%___depth
___t _s_,___skip_,%___depth
___targetcnt = ___targetcnt+1
___makesym ___skip_,%___depth,___targetcnt
op
___jn cnd,_s_,___skip_,%___depth
endm

_else macro
___test %___depth,1
___j ,_e_,___end_,%___depth
___t _s_,___skip_,%___depth
___targetcnt = ___targetcnt+1
___makesym ___skip_,%___depth,___targetcnt
endm

_endif macro
___test %___depth,1
___t _s_,___skip_,%___depth
___t _e_,___end_,%___depth
___depth = ___depth - 1
endm

_while macro op,cnd
___depth = ___depth+1
___targetcnt = ___targetcnt+1
___makesym ___type_,%___depth,2
___makesym ___top_,%___depth,___targetcnt
___makesym ___bottom_,%___depth,___targetcnt
___t _w_,___top_,%___depth
op
ifnb
___jn cnd,_u_,___bottom_,%___depth
endif
endm

_break macro op,cnd
___findloopdepth %___depth
op
___j cnd,_u_,___bottom_,%___loopdepth
endm

_again macro op,cnd
___findloopdepth %___depth
op
___j cnd,_w_,___top_,%___loopdepth
endm

_until macro op,cnd
___test %___depth,2
op
___jn cnd,_w_,___top_,%___depth
___t _u_,___bottom_,%___depth
___depth = ___depth - 1
endm

_againcx macro cnd
___test %___depth,2
___l cnd,_w_,___top_,%___depth
endm

_nextcx macro cnd
___test %___depth,2
___l cnd,_w_,___top_,%___depth
___t _u_,___bottom_,%___depth
___depth = ___depth - 1
endm

; Synonyms for easy use

_loop macro
_while
endm

_lend macro
_until
endm

_wend macro
_until
endm

_repeat macro
_while
endm

_cntnu macro op,cnd
_again ,cnd
endm

___depth = 0 ; start _if/_else nesting at level 0
___targetcnt = 0 ; start label counter at 0 (allows 65535 "local" labels)

.list


  3 Responses to “Category : Utilities for DOS and Windows Machines
Archive   : SIT2.ZIP
Filename : STANDARD.ICL

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/