ADRESSE.TXT: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 15: Line 15:
 
syncmode = $ffff820a ; video sync mode
 
syncmode = $ffff820a ; video sync mode
 
color0 = $ffff8240 ; color registers 0..15
 
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_SETRATE = 4
 
CURS_GETRATE = 5
 
CURS_GETRATE = 5
Line 53: Line 612:
 
Gemdos $e,4
 
Gemdos $e,4
 
.endm
 
.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
 
.TEXT
 
.eject
 
.eject
Line 59: Line 801:
 
</pre>
 
</pre>
 
Back to [[ASM_Tutorial]]
 
Back to [[ASM_Tutorial]]
[[Category: ASSEMBLEUR 68000 sur ATARI ST Part 1 ]]
+
[[Category: 68000 ASSEMBLY ON ATARI ST Part 1 ]]

Latest revision as of 23:55, 16 December 2023

;
; 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