home *** CD-ROM | disk | FTP | other *** search
- ; File name: URAn_DOS.S Revised: 1991.05.07
- ; Creator: U.R.Andersson Created: 1991.01.02
- ; (c)1991 by: U.R.Andersson All rights reserved
- ; Released as: FREEWARE (NB: commercial sales forbidden!)
- ;
- ;
- ; GEMDOS DEFINITIONS
- ;
- Pterm0 = $100000
- Cconin = $100001
- Cconout = $110002
- Cauxin = $100003
- Cauxout = $110004
- Cprnout = $110005
- Crawio = $110006
- Crawcin = $100007
- Cnecin = $100008
- Cconws = $111009
- Cconrs = $11100A
- Cconis = $10000B
- Dsetdrv = $11000E
- Cconos = $100010
- Cprnos = $100011
- Cauxis = $100012
- Cauxos = $100013
- Dgetdrv = $100019
- Fsetdta = $11101A
- Super = $111020
- Tgetdate = $10002A
- Tsetdate = $11002B
- Tgettime = $10002C
- Tsettime = $11002D
- Fgetdta = $10002F
- Sversion = $100030
- Ptermres = $120131
- Dfree = $121036
- Dcreate = $111039
- Ddelete = $11103A
- Dsetpath = $11103B
- Fcreate = $12103C
- Fopen = $12103D
- Fclose = $11003E
- Fread = $13423F
- Fwrite = $134240
- Fdelete = $111041
- Fseek = $130142
- Fattrib = $131043
- Fdup = $110045
- Fforce = $120046
- Dgetpath = $121047
- Malloc = $110148
- Mfree = $111049
- Mshrink = $13244A
- Pexec = $14E04B
- Pterm = $11004C
- Fsfirst = $12104E
- Fsnext = $10004F
- Frename = $136056
- Fdatime = $131057
- ;
- ;
- ; BIOS DEFINITIONS
- ;
- Getmpb = $D11000
- Bconstat = $D10001
- Bconin = $D10002
- Bconout = $D20003
- Rwabs = $D52004
- Setexc = $D22005
- Tickal = $D00006
- Getbpb = $D10007
- Bcostat = $D10008
- Mediach = $D10009
- Drvmap = $D0000A
- Kbshift = $D1000B
- ;
- ;
- ; XBIOS DEFINITIONS
- ;
- Initmous = $E36000
- Ssbrk = $E20001
- Physbase = $E00002
- Logbase = $E00003
- Getrez = $E00004
- Setscreen = $E33005
- Setpallete = $E11006
- Setcolor = $E20007
- Floprd = $E71208
- Flopwr = $E71209
- Flopfmt = $E71F0A
- ;; CLR_D0 = $E0000B
- Midiws = $E2200C
- Mfpint = $E2200D
- Iorec = $E1000E
- Rsconf = $E6000F
- Keytbl = $E37010
- Random = $E00011
- Protobt = $E41212
- Flopver = $E71213
- Scrdmp = $E00014
- Cursconf = $E20015
- Settime = $E10116
- Gettime = $E00017
- Bioskeys = $E00018
- Ikbdws = $E22019
- Jdisint = $E1001A
- Jenabint = $E1001B
- Giaccess = $E2001C
- Offgibit = $E1001D
- Ongibit = $E1001E
- Xbtimer = $E4801F
- Dosound = $E11020
- Setprt = $E10021
- Kbdvbase = $E00022
- Kbrate = $E20023
- Prtblk = $E11024
- Vsync = $E00025
- Supexec = $E11026
- Puntaes = $E00027
- Floprate = $E20029 ;STE & Rainbow TOS
- Blitmode = $E10040 ;all late TOS
- Monopack = $E1004F ;MONOPACK patch (actually, full code = $4D4F)
- ;
- ;
- ; Pointer indirection flag
- ;
- _IND = $40000000
- ;
- ;
- ; Boot sector offsets
- ;
- bs_codebra = 0 ;$00 w $60xx
- bs_filler = 2 ;$02 6b
- bs_serial = 8 ;$08 3b
- bs_sectbytes = 11 ;$0b iw
- bs_clust_sects = 13 ;$0d b
- bs_boot_sects = 14 ;$0e iw
- bs_disk_FATs = 16 ;$10 b
- bs_root_files = 17 ;$11 iw
- bs_disk_sects = 19 ;$13 iw
- bs_media = 21 ;$15 b
- bs_FAT_sects = 22 ;$16 iw
- bs_track_sects = 24 ;$18 iw
- bs_disk_sides = 26 ;$1a iw
- bs_hide_sects = 28 ;$1c iw
- ; next follows the part used only by executable boots
- bs_execflg = 30 ;$1e w
- bs_ldmode = 32 ;$20 w
- bs_ssect = 34 ;$22 w
- bs_sectcnt = 36 ;$24 w
- bs_ldaddr = 38 ;$26 L
- bs_fatbuf = 42 ;$2a L
- bs_fname = 46 ;$2e 11b
- bs_fname_end = 57 ;$39 b
- bs_bootprog = 58 ;$3a ...
- ;
- ;
- ; BPB offsets
- ;
- rsreset
- bpb_sect_bytes rs.w 1 ;typ: 512
- bpb_clust_sects rs.w 1 ;typ: 2
- bpb_clust_bytes rs.w 1 ;typ: 1024
- bpb_root_sects rs.w 1 ;typ: 7
- bpb_FAT_sects rs.w 1 ;typ: 5
- bpb_FAT2_start rs.w 1 ;typ: 6
- bpb_data_start rs.w 1 ;typ: 18 = 2*5 + 7 + 1
- bpb_data_clusts rs.w 1 ;typ: 711 = 720 - 18/2
- bpb_flag rs.w 1 ;b0==16bit_FAT/12bit_FAT typ: 0
- bpb_size = __RS
- ;NB: data_start = FAT_sects*2 + root_sects + 1 rounded up for clust_sects alignment
- ;NB: data_clusts= Total_clusts - data_start/clust_sect
- ;
- ;
- ; Directory offsets
- ;
- rsreset
- dir_fname rs.b 8 ;first char $00==unused $E5==erased
- dir_fext rs.b 3
- dir_fattr rs.b 1
- dir_reserved rs.b 10
- dir_ftime rs.w 1 ;iw
- dir_fdate rs.w 1 ;iw
- dir_fcluster rs.w 1 ;iw
- dir_fsize rs.l 1 ;il
- dir_size = __RS
- ;
- ;
- ; DTA offsets
- ;
- rsreset
- dta_reserved rs.b 21
- dta_fattr rs.b 1
- dta_ftime rs.w 1
- dta_fdate rs.w 1
- dta_fsize rs.l 1
- dta_fname rs.b 14
- dta_size = __RS
- ;
- ;
- ; Program file header offsets
- ;
- rsreset
- ph_codebra rs.w 1 ;always $601A
- ph_textlen rs.l 1
- ph_datalen rs.l 1
- ph_bss_len rs.l 1
- ph_symblen rs.l 1
- ph_res1 rs.l 1
- ph_res2 rs.l 1
- ph_res3 rs.w 1
- ph_textbeg = __RS
- ph_size = __RS
- ;
- ;
- ; Basepage offsets
- ;
- rsreset
- bp_selfbeg_p rs.l 1
- bp_selfend_p rs.l 1
- bp_textbeg_p rs.l 1
- bp_textlen rs.l 1
- bp_databeg_p rs.l 1
- bp_datalen rs.l 1
- bp_bss_beg_p rs.l 1
- bp_bss_len rs.l 1
- bp_dta_p rs.l 1
- bp_parent_p rs.l 1
- bp_reserved rs.l 1
- bp_environ_p rs.l 1
- bp_undef rs.l 20
- bp_arglen rs.b 1
- bp_argstring rs.b 127
- ;
- ;
- ; MACRO DEFINITIONS
- ;
- gemdos MACRO op,v2,v3,v4,v5
- xbios \1,\2,\3,\4,\5
- ENDM
- ;
- sub_gemdos MACRO op,v2,v3,v4,v5
- zz_prep_trap \1,\2,\3,\4,\5
- bsr gemdos_sub
- IFNE zzDOSAS>8
- add #zzDOSAS,sp
- ELSEIF
- addq #zzDOSAS,sp
- ENDC
- ENDM
- ;
- bios MACRO op,v2,v3,v4,v5,v6
- xbios \1,\2,\3,\4,\5,\6
- ENDM
- ;
- sub_bios MACRO op,v2,v3,v4,v5,v6
- zz_prep_trap \1,\2,\3,\4,\5,\6
- bsr bios_sub
- IFNE zzDOSAS>8
- add #zzDOSAS,sp
- ELSEIF
- addq #zzDOSAS,sp
- ENDC
- ENDM
- ;
- xbios MACRO op,v2,v3,v4,v5,v6,v7,v8,v9,v10
- zz_prep_trap \1,\2,\3,\4,\5,\6,\7,\8,\9,\a
- trap #zzDOSTR
- IFNE zzDOSAS>8
- add #zzDOSAS,sp
- ELSEIF
- addq #zzDOSAS,sp
- ENDC
- ENDM
- ;
- sub_xbios MACRO op,v2,v3,v4,v5,v6,v7,v8,v9,v10
- zz_prep_trap \1,\2,\3,\4,\5,\6,\7,\8,\9,\a
- bsr xbios_sub
- IFNE zzDOSAS>8
- add #zzDOSAS,sp
- ELSEIF
- addq #zzDOSAS,sp
- ENDC
- ENDM
- ;
- zz_prep_trap MACRO op,v2,v3,v4,v5,v6,v7,v8,v9,v10
- zzDOSIF set (\1)&_IND
- zzDOSTR set ((\1)>>20)&255
- zzDOSAC set ((\1)>>16)&15
- zzDOSPF set ((\1)>>12)&15
- zzDOSLF set ((\1)>>08)&15
- zzDOSOP set (\1)&255
- IFNE zzDOSOP=$4F
- IFNE zzDOSTR=$0E
- zzDOSOP set $4D4F
- ENDC
- ENDC
- zzDOSAS set 2
- IFNE zzDOSAC>0
- IFNE zzDOSAC>1
- IFNE zzDOSAC>2
- IFNE zzDOSAC>3
- IFNE zzDOSAC>4
- IFNE zzDOSAC>5
- IFNE zzDOSAC>6
- IFNE zzDOSAC>7
- IFNE zzDOSAC>8
- IFNE zzDOSLF=15
- zzDOSLF set 130
- ENDC
- DOSPUSH 8,\a
- ENDC
- DOSPUSH 7,\9
- ENDC
- DOSPUSH 6,\8
- ENDC
- DOSPUSH 5,\7
- ENDC
- DOSPUSH 4,\6
- ENDC
- DOSPUSH 3,\5
- ENDC
- DOSPUSH 2,\4
- ENDC
- DOSPUSH 1,\3
- ENDC
- DOSPUSH 0,\2
- ENDC
- MOVE #zzDOSOP,-(sp)
- ENDM
- ;
- ;This macro handles all argument checking for bios, xbios & gemdos functions
- ;special argument cases are:
- ;no argument = FAIL error
- ;'()' = Assumes argument is on stack already
- ;'!' = Places 0 on stack using "clr"
- ;'?' = Places -1 on stack
- DOSPUSH MACRO v1,v2
- zzDOSAS set zzDOSAS+2
- IFNE (1<<\1)&(zzDOSPF!zzDOSLF)
- zzDOSAS set zzDOSAS+2
- ENDC
- IFC '()','\2'
- MEXIT
- ENDC
- IFC '','\2'
- FAIL Missing operand in system call
- MEXIT
- ENDC
- IFNE (1<<\1)&zzDOSPF
- IFC '!','\2'
- clr.l -(sp)
- MEXIT
- ENDC
- IFC '?','\2'
- move.l #-1,-(sp)
- MEXIT
- ENDC
- IFEQ zzDOSIF
- pea \2
- MEXIT
- ENDC
- move.l \2,-(SP)
- MEXIT
- ENDC
- IFNE (1<<\1)&zzDOSLF
- IFC '!','\2'
- clr.l -(sp)
- MEXIT
- ENDC
- IFC '?','\2'
- move.l #-1,-(sp)
- MEXIT
- ENDC
- move.l \2,-(SP)
- MEXIT
- ENDC
- IFC '!','\2'
- clr -(sp)
- MEXIT
- ENDC
- IFC '?','\2'
- move #-1,-(sp)
- MEXIT
- ENDC
- move \2,-(SP)
- ENDM
- ;
- zzDOSAS set 0
- ;
- ; End of file: URAn_DOS.S
-