ADRESSE.TXT
Jump to navigation
Jump to search
;
; Atari ST system addresses and macros for Mad Mac
;
; Atari ST hardware
;
memconf = $ffff8001 ; memory controller
dbaseh = $ffff8201
dbasel = $ffff8203 ; display base low, high
vcounthi = $ffff8205 ; display counter low, medium, high
vcountmid = $ffff8207
vcountlow = $ffff8209
syncmode = $ffff820a ; video sync mode
color0 = $ffff8240 ; color registers 0..15
color1 = $ffff8242
color2 = $ffff8244
color3 = $ffff8246
color4 = $ffff8248
color5 = $ffff824a
color6 = $ffff824c
color7 = $ffff824e
color8 = $ffff8250
color9 = $ffff8252
color10 = $ffff8254
color11 = $ffff8256
color12 = $ffff8258
color13 = $ffff825a
color14 = $ffff825c
color15 = $ffff825e
shiftmd = $ffff8260 ; shifter mode (resolution)
;--- DMA chip
;
diskctl = $ffff8604 ; disk controller data access
fifo = $ffff8606 ; DMA mode control
dmahigh = $ffff8609 ; DMA base high, medium, low
dmamid = $ffff860b
dmalow = $ffff860d
;--- 1770 registers
;
cmdreg = $80 ; 1770/FIFO command register select
trkreg = $82 ; 1770/FIFO track register select
secreg = $84 ; 1770/FIFO sector register select
datareg = $86 ; 1770/FIFO data register select
;--- Sound Chip
;
giselect = $ffff8800 ; (W) sound chip register select
giread = $ffff8800 ; (R) sound chip read-data
giwrite = $ffff8802 ; (W) sound chip write-data
gitoneaf = 0 ; channel A fine/coarse tune
gitoneac = 1
gitonebf = 2 ; channel B
gitonebc = 3
gitonecf = 4 ; channel C
gitonecc = 5
ginoise = 6 ; noise generator control
gimixer = 7 ; I/O control/volume control register
giaamp = 8 ; channel A, B, C amplitude
gibamp = 9
gicamp = $a
gifienvlp = $b ; envelope period fine, coarse tune
gicrnvlp = $c
giporta = $e ; GI register# for I/O port A
giportb = $f ; Centronics output register
;--- Bits in "giporta":
;
xrts = 8 ; RTS output
dtr = $10 ; DTR output
strobe = $20 ; Centronics strobe output
gpo = $40 ; "general purpose" output
;--- 68901 (MFP)
;
mfp = $fffffa00 ; mfp base
gpip = mfp+1 ; general purpose I/O
aer = mfp+3 ; active edge reg
ddr = mfp+5 ; data direction reg
iera = mfp+7 ; interrupt enable A & B
ierb = mfp+9
ipra = mfp+$b ; interrupt pending A & B
iprb = mfp+$d
isra = mfp+$f ; interrupt inService A & B
isrb = mfp+$11
imra = mfp+$13 ; interrupt mask A & B
imrb = mfp+$15
vr = mfp+$17 ; interrupt vector base
tacr = mfp+$19 ; timer A control
tbcr = mfp+$1b ; timer B control
tcdcr = mfp+$1d ; timer C & D control
tadr = mfp+$1f ; timer A data
tbdr = mfp+$21 ; timer B data
tcdr = mfp+$23 ; timer C data
tddr = mfp+$25 ; timer D data
scr = mfp+$27 ; sync char
ucr = mfp+$29 ; USART control reg
rsr = mfp+$2b ; receiver status
tsr = mfp+$2d ; transmit status
udr = mfp+$2f ; USART data
;--- 6850s
;
keyctl = $fffffc00 ; keyboard ACIA control
keybd = $fffffc02 ; keyboard data
midictl = $fffffc04 ; MIDI ACIA control
midi = $fffffc06 ; MIDI data
.subttl 'BIOS Variables'
;
; BIOS Variables
;
etv_timer = $400 ; vector for timer interrupt chain
etv_critic = $404 ; vector for critical error chain
etv_term = $408 ; vector for process terminate
etv_xtra = $40c ; 5 reserved vectors
memvalid = $420 ; indicates system state on RESET
memcntlr = $424 ; mem controller config nibble
resvalid = $426 ; validates 'resvector'
resvector = $42a ; [RESET] bailout vector
phystop = $42e ; physical top of RAM
_membot = $432 ; bottom of available memory;
_memtop = $436 ; top of available memory;
memval2 = $43a ; validates 'memcntlr' and 'memconf'
flock = $43e ; floppy disk/FIFO lock variable
seekrate = $440 ; default floppy seek rate
_timr_ms = $442 ; system timer calibration (in ms)
_fverify = $444 ; nonzero: verify on floppy write
_bootdev = $446 ; default boot device
palmode = $448 ; nonzero ==> PAL mode
defshiftmd = $44a ; default video rez (first byte)
sshiftmd = $44c ; shadow for 'shiftmd' register
_v_bas_ad = $44e ; pointer to base of screen memory
vblsem = $452 ; semaphore to enforce mutex in vbl
nvbls = $454 ; number of deferred vectors
_vblqueue = $456 ; pointer to vector of deferred vfuncs
colorptr = $45a ; pointer to palette setup (or NULL)
screenpt = $45e ; pointer to screen base setup (|NULL)
_vbclock = $462 ; count of unblocked vblanks
_frclock = $466 ; count of every vblank
hdv_init = $46a ; hard disk initialization
swv_vec = $46e ; video change-resolution bailout
hdv_bpb = $472 ; disk "get BPB"
hdv_rw = $476 ; disk read/write
hdv_boot = $47a ; disk "get boot sector"
hdv_mediach = $47e ; disk media change detect
_cmdload = $482 ; nonzero: load COMMAND.COM from boot
conterm = $484 ; console/vt52 bitSwitches (%%0..%%2)
trp14ret = $486 ; saved return addr for _trap14
criticret = $48a ; saved return addr for _critic
themd = $48e ; memory descriptor (MD)
_____md = $49e ; (more MD)
savptr = $4a2 ; pointer to register save area
_nflops = $4a6 ; number of disks attached (0, 1+)
con_state = $4a8 ; state of conout() parser
save_row = $4ac ; saved row# for cursor X-Y addressing
sav_context = $4ae ; pointer to saved processor context
_bufl = $4b2 ; two buffer-list headers
_hz_200 = $4ba ; 200hz raw system timer tick
_drvbits = $4c2 ; bit vector of "live" block devices
_dskbufp = $4c6 ; pointer to common disk buffer
_autopath = $4ca ; pointer to autoexec path (or NULL)
_vbl_list = $4ce ; initial _vblqueue (to $4ee)
_dumpflg = $4ee ; screen-dump flag
_prtabt = $4f0 ; printer abort flag
_sysbase = $4f2 ; -> base of OS
_shell_p = $4f6 ; -> global shell info
end_os = $4fa ; -> end of OS memory usage
exec_os = $4fe ; -> address of shell to exec on startup
scr_dump = $502 ; -> screen dump code
prv_lsto = $506 ; -> _lstostat()
prv_lst = $50a ; -> _lstout()
prv_auxo = $50e ; -> _auxostat()
prv_aux = $512 ; -> _auxout()
cookie_jar = $5a0 ; -> used it! (GEM Protocol for example...)
.subttl '"Line A" Equates'
;
; "Line A" Equates
;
VPLANES = 0
VWRAP = 2
CONTRL = 4
INTIN = 8
PTSIN = 12
INTOUT = 16
PTSOUT = 20
COLBIT0 = 24
COLBIT1 = 26
COLBIT2 = 28
COLBIT3 = 30
LSTLIN = 32
LNMASK = 34
WMODE = 36
X1 = 38
Y1 = 40
X2 = 42
Y2 = 44
PATPTR = 46
PATMSK = 50
MFILL = 52
CLIP = 54
XMINCL = 56
YMINCL = 58
XMAXCL = 60
YMAXCL = 62
XDDA = 64
DDAINC = 66
SCALDIR = 68
MONO = 70
SRCX = 72
SRCY = 74
DSTX = 76
DSTY = 78
DELX = 80
DELY = 82
FBASE = 84
FWIDTH = 88
STYLE = 90
LITEMSK = 92
SKEWMSK = 94
WEIGHT = 96
ROFF = 98
LOFF = 100
SCALE = 102
CHUP = 104
TEXTFG = 106
SCRTCHP = 108
SCRPT2 = 112
TEXTBG = 114
COPYTRAN = 116
SEEDABORT = 118
.subttl '"Line A" Macros'
;
; "Line A" macros
;
.macro A_init
dc.w $a000
.endm
.macro A_putpix
dc.w $a001
.endm
.macro A_getpix
dc.w $a002
.endm
.macro A_abline
dc.w $a003
.endm
.macro A_habline
dc.w $a004
.endm
.macro A_rectfill
dc.w $a005
.endm
.macro A_polyfill
dc.w $a006
.endm
.macro A_bitblt
dc.w $a007
.endm
.macro A_textblt
dc.w $a008
.endm
.macro A_showcur
dc.w $a009
.endm
.macro A_hidecur
dc.w $a00a
.endm
.macro A_chgcur
dc.w $a00b
.endm
.macro A_drsprite
dc.w $a00c
.endm
.macro A_unsprite
dc.w $a00d
.endm
.macro A_copyrstr
dc.w $a00e
.endm
.macro A_seedfill
dc.w $a00f
.endm
.subttl 'Operating System Macros'
.macro Bios trpno, clean ; trap to BIOS
move.w #\trpno,-(sp)
trap #13
.if \clean <= 8
addq #\clean,sp
.else
add.w #\clean,sp
.endif
.endm
.macro Xbios trpno, clean ; trap to XBIOS
move.w #\trpno,-(sp)
trap #14
.if \clean <= 8
addq #\clean,sp
.else
add.w #\clean,sp
endif
.endm
.iif !(^^defined GEMDOS), GEMDOS = 1
.macro Gemdos trpno, clean ; trap to GEMDOS
move.w #\trpno,-(sp)
trap #GEMDOS
.if \clean <= 8
addq #\clean,sp
.else
add.w #\clean,sp
.endif
.endm
.macro Cls ; Clear Screen
move.w #27,-(sp)
Gemdos 2,4
move.w #'E',-(sp)
Gemdos 2,4
.endm
.macro Curson ; Cursor ON
move.w #27,-(sp)
Gemdos 2,4
move.w #'e',-(sp)
Gemdos 2,4
.endm
.macro Cursoff ; Cursor OFF
move.w #27,-(sp)
Gemdos 2,4
move.w #'f',-(sp)
Gemdos 2,4
.endm
.macro Inv ; INverse Video
move.w #27,-(sp)
Gemdos 2,4
move.w #'p',-(sp)
Gemdos 2,4
.endm
.macro Normv ; NORMal Video
move.w #27,-(sp)
Gemdos 2,4
move.w #'q',-(sp)
Gemdos 2,4
.endm
.macro Crlf ; Carriage Return+Line Feed
move.w #$0D,-(sp)
Gemdos 2,4
move.w #$0A,-(sp)
Gemdos 2,4
.endm
;
; String "foobar" (push onto stack)
; String "foobar",a0 move address of string somewhere
;
.macro String str,loc
.if \?loc
move.l #.\~,\loc
else
pea .\~
endif
.data
.\~: dc.b \str,0
.text
.endm
.subttl 'Bios Traps'
;--- Character Device Numbers
;
PRT = 0 ; printer
AUX = 1 ; RS-232
CON = 2 ; console (vt-52 emulator)
MIDI = 3 ; MIDI port
IKBD = 4 ; ikbd (out only)
RAWCON = 5 ; console (raw characters)
.macro Getmbp ptr
move.l \ptr,-(sp)
Bios 0,4
.endm
.macro Bconstat dev
move.w \dev,-(sp)
Bios 1,4
.endm
.macro Bconin dev
move.w \dev,-(sp)
Bios 2,4
.endm
.macro Bconout dev, char
move.w \char,-(sp)
move.w \dev,-(sp)
Bios 3,6
.endm
.macro Rwabs rwflag, buf, count, recno, dev
move.w \dev,-(sp)
move.w \recno,-(sp)
move.w \count,-(sp)
move.l \buf,-(sp)
move.w \rwflag,-(sp)
Bios 4,14
.endm
.macro Setexc vecnum, vec
move.l \vec,-(sp)
move.w \vecnum,-(sp)
Bios 5,8
.endm
.macro Tickcal
Bios 6,2
.endm
.macro Getbpb devno
move.w \devno,-(sp)
Bios 7,4
.endm
.macro Bcostat devno
move.w \devno,-(sp)
Bios 8,4
.endm
.macro Mediach devno
move.w \devno,-(sp)
Bios 9,4
.endm
.macro Drvmap
Bios 10,2
.endm
.macro Kbshift mode
move.w \mode,-(sp)
Bios 11,4
.endm
.subttl 'Extended BIOS Traps'
.macro Initmous type, param, vec
move.l \vec,-(sp)
move.l \param,-(sp)
move.w \type,-(sp)
Xbios 0,12
.endm
.macro Physbase
Xbios 2,2
.endm
.macro Logbase
Xbios 3,2
.endm
.macro Getrez
Xbios 4,2
.endm
.macro Setscreen logloc, physloc, rez
move.w \rez,-(sp)
move.l \physloc,-(sp)
move.l \logloc,-(sp)
Xbios 5,12
.endm
.macro Setpallete ptr
move.l \ptr,-(sp)
Xbios 6,6
.endm
.macro Setcolor colnum, color
move.w \color,-(sp)
move.w \colnum,-(sp)
Xbios 7,6
.endm
.macro Floprd buf, devno, sectno, trackno, sideno, count
move.w \count,-(sp)
move.w \sideno,-(sp)
move.w \trackno,-(sp)
move.w \sectno,-(sp)
move.w \devno,-(sp)
clr.l -(sp) ; (filler)
move.l \buf,-(sp)
Xbios 8,20
.endm
.macro Flopwr buf, devno, sectno, trackno, sideno, count
move.w \count,-(sp)
move.w \sideno,-(sp)
move.w \trackno,-(sp)
move.w \sectno,-(sp)
move.w \devno,-(sp)
clr.l -(sp) ; (filler)
move.l \buf,-(sp)
Xbios 9,20
.endm
.macro Flopfmt buf,devno,spt,trackno,sideno,interlv,magic,virgin
move.w \virgin,-(sp)
move.l \magic,-(sp)
move.w \interlv,-(sp)
move.w \sideno,-(sp)
move.w \trackno,-(sp)
move.w \spt,-(sp)
move.w \devno,-(sp)
clr.l -(sp) ; (filler)
move.l \buf,-(sp)
Xbios $a,26
.endm
.macro Midiws cnt1,ptr
move.l \ptr,-(sp)
move.w \cnt1,-(sp)
Xbios $c,8
.endm
.macro Random
Xbios $11,2
.endm
.macro Protobt buf,serialno,disktype,execflag
move.w \execflag,-(sp)
move.w \disktype,-(sp)
move.l \serialno,-(sp)
move.l \buf,-(sp)
Xbios $12,14
.endm
.macro Flopver buf, devno, sectno, trackno, sideno, count
move.w \count,-(sp)
move.w \sideno,-(sp)
move.w \trackno,-(sp)
move.w \sectno,-(sp)
move.w \devno,-(sp)
clr.l -(sp) ; (filler)
move.l \buf,-(sp)
Xbios $13,20
.endm
CURS_HIDE = 0
CURS_SHOW = 1
CURS_BLINK = 2
CURS_NOBLINK = 3
CURS_SETRATE = 4
CURS_GETRATE = 5
.macro Cursconf func,op
move.w \op,-(sp)
move.w \func,-(sp)
Xbios $15,6
.endm
.macro Settime datetime
move.l \datetime,-(sp)
Xbios $16,6
.endm
.macro Gettime
Xbios $17,2
.endm
.macro Kbdvbase
Xbios $22,2
.endm
.macro Vsync
Xbios $24,2
.endm
.macro Supexec where
move.l \where,-(sp)
Xbios $26,6
.endm
.subttl 'Gemdos Traps'
.macro Dsetdrv drive
move.w \drive,-(sp)
Gemdos $e,4
.endm
.macro Pterm0
clr.w -(sp)
trap #GEMDOS
illegal
.endm
.macro Pterm code
.if \?code
move.w \code,-(sp)
.else
clr.w -(sp)
.endif
move.w #$4c,-(sp)
trap #GEMDOS
illegal
.endm
.macro Super
clr.l -(sp)
move.w #$20,-(sp)
trap #GEMDOS
addq #6,sp
move.l d0,-(sp)
move.w #$20,-(sp)
.endm
.macro User
trap #GEMDOS
addq #6,sp
.endm
.macro Puts string
move.l \string,-(sp)
Gemdos 9,6
.endm
.macro Tgetdate
Gemdos $2a,2
.endm
.macro Tsetdate date
move.w \date,-(sp)
Gemdos $2b,4
.endm
.macro Tgettime
Gemdos $2c,2
.endm
.macro Tsettime time
move.w \time,-(sp)
Gemdos $2d,4
.endm
.macro Fgetdta
Gemdos $2f,0
.endm
.macro Sversion
Gemdos $30,2
.endm
.macro Dfree buf,drive
move.w \drive,-(sp)
move.l \buf,-(sp)
Gemdos $36,8
.endm
.macro Fopen file, mode
move.w \mode,-(sp)
move.l \file,-(sp)
Gemdos $3d,8
.endm
.macro Fcreate file, mode
move.w \mode,-(sp)
move.l \file,-(sp)
Gemdos $3c,8
.endm
.macro Fread handle, count, buf
move.l \buf,-(sp)
move.l \count,-(sp)
move.w \handle,-(sp)
Gemdos $3f,12
.endm
.macro Fwrite handle, count, buf
move.l \buf,-(sp)
move.l \count,-(sp)
move.w \handle,-(sp)
Gemdos $40,12
.endm
.macro Fclose handle
move.w \handle,-(sp)
Gemdos $3e,4
.endm
.macro Fdelete file
move.l \file,-(sp)
Gemdos $41,6
.endm
.macro Fseek offset, handle, mode
move.w \mode,-(sp)
move.w \handle,-(sp)
move.l \offset,-(sp)
Gemdos $42,10
.endm
.macro Fsetdta addr
move.l \addr,-(sp)
Gemdos $1a,6
.endm
.macro Ptermres count, retcode
move.w \retcode,-(sp)
move.l \count,-(sp)
Gemdos $31,8
.endm
.macro Mshrink block, newsiz
move.l \newsiz,-(sp)
move.l \block,-(sp)
clr.w -(sp)
Gemdos $4a,12
.endm
.macro Malloc amount
move.l \amount,-(sp)
Gemdos $48,6
.endm
.macro Mfree addr
move.l \addr,-(sp)
Gemdos $49,6
.endm
.macro Pexec mode, p1, p2, p3
move.l \p3,-(sp)
move.l \p2,-(sp)
move.l \p1,-(sp)
move.w \mode,-(sp)
Gemdos $4b,16
.endm
.macro Fsfirst fspec, attr
move.w \attr,-(sp)
move.l \fspec,-(sp)
Gemdos $4e,8
.endm
.macro Fsnext
Gemdos $4f,2
.endm
.subttl 'Structures'
;
; Basepage Format
;
.ABS
Plowtpa: ds.l 1
Phitpa: ds.l 1
Ptbase: ds.l 1
Ptlen: ds.l 1
Pdbase: ds.l 1
Pdlen: ds.l 1
Pbbase: ds.l 1
Pblen: ds.l 1
Pxdta: ds.l 1
Pparent: ds.l 1
;
; Searchfirst/Searchnext DTA structure
;
.ABS
ds.b 21
DTA_attr: ds.b 1
DTA_time: ds.w 1
DTA_date: ds.w 1
DTA_size: ds.l 1
DTA_name: ds.b 14
.TEXT
.eject
.list
Back to ASM_Tutorial