*--------------------------------------------------------------------------- * XPLOR.ASM * * A program to explore the various structures of the Amiga. * Starting with Execbase.... * *--------------------------------------------------------------------------- begin jmp start include "macros.basic" use libs ;include library functions use doslib ;All libraries listed will be * use intib ;enabled for opening/closing * use gfxlib ;with the 'dolibs' and 'exit' * use dfontlib ;macros. * use clistlib * use layerslib * use ffplib * use translib * use mathdoublib * use speechlib * use iconlib use b2h ;binary to hex ASCII use prt ;print * use scnull ;scan for NULL * use copy ;copy memory * use scm ;compare strings * use sln ;get length of string * use ins ;INSTRING function * use dbug ;debugging routines * use arg ;arg parser routines use leadspc ;replace leading ASCII 0 to spaces (ldspc) include "macros.opt" include "macros.data" XTRN Output XTRN Write XTRN Permit XTRN Forbid *-------------- * Subroutines *-------------- CNOP 0,4 menu printz #menutext rts nxtnode move.l flink,a0 ;get next node address move.l a0,nodeptr ; and make it current move.l (a0),flink ;get new link rts dmplist cmp.l #0,flink ;see if link is zero beq endump ;if zero, then we are at end of list move.l nodeptr,a0 ;get node address binhex a0,buff ;convert address to hex string ldspc buff ;remove leading zeros printz #buff ;print address printz #dash ; and separator move.l nodeptr,a0 ;recover address of node adda.l #10,a0 ;point at address of libname printz (a0) ;print libname printz #newline jsr nxtnode ;get next node bra dmplist ; and go back to process endump rts *-------------- * Main Program *-------------- CNOP 0,4 start dolibs ;open all libraries as per list in 'use' bne libsok exit 100 libsok call Forbid(a6) move.l dos,a6 call Output(a6) move.l d0,stdout move.l (AbsBase),d1 ;get Execbase pointer move.l #9,d0 ;loop counter move.l #exbase,a1 ;start of table of offsets loop1 add.l d1,(a1)+ ;generate list addresses dbf d0,loop1 ; in list table main jsr menu ;choose list to look at. (Stub now) *-------------------- * Dump library list *-------------------- libr move.l (liblist),a0 ;get pointer to library node move.l a0,nodeptr ; and save it move.l (a0),flink ;save link to next node jsr nxtnode ;set up for first lib node jsr dmplist printz #libsdone *------------------ * Dump device list *------------------ devs move.l (devlist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #devsdone *-------------------- * Dump resource list *-------------------- res move.l (reslist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #resdone *--------------------- * Dump TaskReady list *--------------------- trdy move.l (trdylist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #trdydone *---------------------- * Dump Taskwaiting list *---------------------- twait move.l (twtlist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #twtdone *---------------------- * Dump Memory list *---------------------- memory move.l (memlist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #memdone *---------------------- * Dump Memory list *---------------------- irpt move.l (intrlist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #irptdone *---------------------- * Dump Memory list *---------------------- ports move.l (portlist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #portsdone *---------------------- * Dump Memory list *---------------------- semlist move.l (smlist),a0 move.l a0,nodeptr move.l (a0),flink jsr nxtnode jsr dmplist printz #semdone *---------------------- done move.l AbsBase,a6 call Permit(a6) exit 0 ;normal return *===============================* SECTION BSS CNOP 0,4 stdout ds.l 1 flink ds.l 1 nodeptr ds.l 1 SECTION CODE exbase dc.l 0 ;Address of Execbase memlist dc.l $142 ;Table of offsets for system lists reslist dc.l $150 ; These are offsets from Execbase devlist dc.l $15e ; and Execbase will be added to each intrlist dc.l $16c ; offset to give an absolute address liblist dc.l $17a ; for the head of each list. portlist dc.l $188 trdylist dc.l $196 twtlist dc.l $1a4 smlist dc.l $214 buff dc.b ' ',0 dash dc.b ' - ',0 newline dc.b 10,0 libsdone dc.b 10,' End of Library list',10,10,0 devsdone dc.b 10,' End of Device list',10,10,0 resdone dc.b 10,' End of Resource list',10,10,0 trdydone dc.b 10,' End of TaskReady list',10,10,0 twtdone dc.b 10,' End of TaskWaiting list',10,10,0 memdone dc.b 10,' End of Memory list',10,10,0 irptdone dc.b 10,' End of Interrupt list',10,10,0 portsdone dc.b 10,' End of Port list',10,10,0 semdone dc.b 10,' End of Semaphore list',10,10,0 menutext dc.b ' Menu stuff.... stub now.',10,10,0 end