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