unit Hardware;

INTERFACE
uses Exec;


type
	pCIA = ^tCIA;
	tCIA = record
		ciapra: byte;
		pad0: array [0..254] of byte;
		ciaprb: byte;
		pad1: array [0..254] of byte;
		ciaddra: byte;
		pad2: array [0..254] of byte;
		ciaddrb: byte;
		pad3: array [0..254] of byte;
		ciatalo: byte;
		pad4: array [0..254] of byte;
		ciatahi: byte;
		pad5: array [0..254] of byte;
		ciatblo: byte;
		pad6: array [0..254] of byte;
		ciatbhi: byte;
		pad7: array [0..254] of byte;
		ciatodlow: byte;
		pad8: array [0..254] of byte;
		ciatodmid: byte;
		pad9: array [0..254] of byte;
		ciatodhi: byte;
		pad10: array [0..254] of byte;
		unusedreg: byte;
		pad11: array [0..254] of byte;
		ciasdr: byte;
		pad12: array [0..254] of byte;
		ciaicr: byte;
		pad13: array [0..254] of byte;
		ciacra: byte;
		pad14: array [0..254] of byte;
		ciacrb: byte;
		end;

	pAudChannel = ^tAudChannel;
	tAudChannel = record
		ac_ptr: pword;
		ac_len: word;
		ac_per: word;
		ac_vol: word;
		ac_dat: word;
		ac_pad: array [0..1] of word;
		end;

	pSpriteDef = ^tSpriteDef;
	tSpriteDef = record
		pos: word;
		ctl: word;
		dataa: word;
		datab: word;
		end;

	pCustom = ^tCustom;
	tCustom = record
		bltddat: word;
		dmaconr: word;
		vposr: word;
		vhposr: word;
		dskdatr: word;
		joy0dat: word;
		joy1dat: word;
		clxdat: word;
		adkconr: word;
		pot0dat: word;
		pot1dat: word;
		potinp: word;
		serdatr: word;
		dskbytr: word;
		intenar: word;
		intreqr: word;
		dskpt: pointer;
		dsklen: word;
		dskdat: word;
		refptr: word;
		vposw: word;
		vhposw: word;
		copcon: word;
		serdat: word;
		serper: word;
		potgo: word;
		joytest: word;
		strequ: word;
		strvbl: word;
		strhor: word;
		strlong: word;
		bltcon0: word;
		bltcon1: word;
		bltafwm: word;
		bltalwm: word;
		bltcpt: pointer;
		bltbpt: pointer;
		bltapt: pointer;
		bltdpt: pointer;
		bltsize: word;
		pad2d: byte;
		bltcon0l: byte;
		bltsizv: word;
		bltsizh: word;
		bltcmod: word;
		bltbmod: word;
		bltamod: word;
		bltdmod: word;
		pad34: array [0..3] of word;
		bltcdat: word;
		bltbdat: word;
		bltadat: word;
		pad3b: array [0..2] of word;
		deniseid: word;
		dsksync: word;
		cop1lc: long;
		cop2lc: long;
		copjmp1: word;
		copjmp2: word;
		copins: word;
		diwstrt: word;
		diwstop: word;
		ddfstrt: word;
		ddfstop: word;
		dmacon: word;
		clxcon: word;
		intena: word;
		intreq: word;
		adkcon: word;
		aud: array [0..3] of tAudChannel;
		bplpt: array [0..7] of pointer;
		bplcon0: word;
		bplcon1: word;
		bplcon2: word;
		bplcon3: word;
		bpl1mod: word;
		bpl2mod: word;
		bplhmod: word;
		pad86: array [0..0] of word;
		bpldat: array [0..7] of word;
		sprpt: array [0..7] of pointer;
		spr: array [0..7] of tSpriteDef;
		color: array [0..31] of word;
		htotal: word;
		hsstop: word;
		hbstrt: word;
		hbstop: word;
		vtotal: word;
		vsstop: word;
		vbstrt: word;
		vbstop: word;
		sprhstrt: word;
		sprhstop: word;
		bplhstrt: word;
		bplhstop: word;
		hhposw: word;
		hhposr: word;
		beamcon0: word;
		hsstrt: word;
		vsstrt: word;
		hcenter: word;
		diwhigh: word;
		end;

	pbltnode = ^tbltnode;
	tbltnode = record
		n: pbltnode;
		function_: pointer;
		stat: byte;
		blitsize: integer;
		beamsync: integer;
		cleanup: pointer;
		end;



const
	ADKF_PRE000NS = 0;
	VSIZEBITS = $A;
	DMAF_BLITTER = $40;
	INTF_PORTS = 8;
	DEST = $100;
	OCTANT1 = $10;
	CIAICRF_FLG = $10;
	OCTANT2 = 0;
	ADKB_MSBSYNC = 9;
	ADKF_UARTBRK = $800;
	OCTANT3 = 8;
	CIAB_DSKTRACK0 = 4;
	CIAB_OVERLAY = 0;
	CIAF_DSKSTEP = 1;
	OCTANT4 = $14;
	CIAB_DSKCHANGE = 2;
	ADKF_PRE140NS = $2000;
	OCTANT5 = $1C;
	OCTANT6 = $C;
	ADKB_USE3PN = 7;
	ADKF_MSBSYNC = $200;
	OCTANT7 = 4;
	CIACRAB_RUNMODE = 3;
	CIAB_PRTRBUSY = 0;
	CIAF_DSKTRACK0 = $10;
	CIAF_OVERLAY = 1;
	OCTANT8 = $18;
	CIACRBB_RUNMODE = 3;
	CIAB_DSKPROT = 3;
	CIAF_DSKCHANGE = 4;
	INTB_RBF = $B;
	INTB_TBE = 0;
	ADKF_PRE280NS = $4000;
	CIACRAB_OUTMODE = 2;
	ADKF_USE3PN = $80;
	ADKF_PRE560NS = $6000;
	CIACRBB_OUTMODE = 2;
	CIACRAF_RUNMODE = 8;
	CIAB_GAMEPORT0 = 6;
	CIAF_PRTRBUSY = 1;
	CIACRBF_RUNMODE = 8;
	CIAB_GAMEPORT1 = 7;
	CIAB_PRTRPOUT = 1;
	CIAF_DSKPROT = 8;
	INTF_RBF = $800;
	ADKB_USE3VN = 3;
	CIAB_PRTRSEL = 2;
	INTF_TBE = 1;
	CIACRAB_INMODE = 5;
	CIACRAF_OUTMODE = 4;
	CIAB_COMDSR = 3;
	CLEANUP = $40;
	CIACRBF_OUTMODE = 4;
	CIAB_COMDTR = 7;
	CIAB_COMCTS = 4;
	CIAF_GAMEPORT0 = $40;
	CIAF_GAMEPORT1 = $80;
	CIAF_PRTRPOUT = 2;
	ADKF_USE3VN = 8;
	FILL_CARRYIN = 4;
	CIAB_COMCD = 5;
	CIAF_PRTRSEL = 4;
	CIACRAF_INMODE = $20;
	CIAF_COMDSR = 8;
	CIAF_COMDTR = $80;
	CIAF_COMCTS = $10;
	DMAB_COPPER = 7;
	ASHIFTSHIFT = $C;
	CIAF_COMCD = $20;
	ADKB_SETCLR = $F;
	BSHIFTSHIFT = $C;
	CIAB_DSKRDY = 5;
	DMAB_MASTER = 9;
	AUL = 4;
	DMAF_COPPER = $80;
	DMAB_SETCLR = $F;
	ADKF_SETCLR = $8000;
	CIACRAB_SPMODE = 6;
	CIAF_DSKRDY = $20;
	DMAF_MASTER = $200;
	NANBNC = 1;
	BC1F_DESC = 2;
	DMAF_SETCLR = $8000;
	DMAB_RASTER = 8;
	CIAICRB_TA = 0;
	CIACRAF_SPMODE = $40;
	CIAB_COMRTS = 6;
	INTB_DSKSYNC = $C;
	BLITREVERSE = 2;
	CIAICRB_TB = 1;
	DMAB_AUD0 = 0;
	INTB_DSKBLK = 1;
	DMAF_RASTER = $100;
	DMAB_AUD1 = 1;
	BC0B_SRCA = $B;
	FILL_XOR = $10;
	DMAB_AUD2 = 2;
	BC0B_SRCB = $A;
	SUD = $10;
	CIAICRF_TA = 1;
	CIAF_COMRTS = $40;
	DMAB_AUD3 = 3;
	DMAB_SPRITE = 5;
	INTF_DSKSYNC = $1000;
	BC0B_SRCC = 9;
	CIAICRF_TB = 2;
	DMAF_AUD0 = 1;
	INTF_DSKBLK = 2;
	CIAICRB_IR = 7;
	DMAF_AUD1 = 2;
	BC0F_SRCA = $800;
	CIACRBB_ALARM = 7;
	DMAF_AUD2 = 4;
	BC0F_SRCB = $400;
	DMAF_AUDIO = $F;
	DMAF_AUD3 = 8;
	DMAF_SPRITE = $20;
	INTB_SOFTINT = 2;
	BC0F_SRCC = $200;
	CIAICRB_SETCLR = 7;
	BC0B_DEST = 8;
	CIAICRF_IR = $80;
	CIACRBF_ALARM = $80;
	ADKB_PRECOMP0 = $D;
	SUL = 8;
	CIAB_DSKDIREC = 1;
	INTF_SOFTINT = 4;
	ADKB_PRECOMP1 = $E;
	OVFLAG = $20;
	CIAICRF_SETCLR = $80;
	BC0F_DEST = $100;
	CIAICRB_SP = 3;
	ADKF_PRECOMP0 = $2000;
	FILL_OR = 8;
	CIAF_DSKDIREC = 2;
	ADKF_PRECOMP1 = $4000;
	CIAICRF_SP = 8;
	INTB_SETCLR = $F;
	CIACRBF_IN_CNT = $20;
	ANBNC = $10;
	NABNC = 4;
	NANBC = 2;
	ONEDOT = 2;
	CIACRAB_TODIN = 7;
	INTF_SETCLR = $8000;
	INTB_AUD0 = 7;
	CIACRAF_TODIN = $80;
	INTB_AUD1 = 8;
	INTB_AUD2 = 9;
	INTB_AUD3 = $A;
	CIACRAB_LOAD = 4;
	CIAB_DSKSEL0 = 3;
	INTF_AUD0 = $80;
	CIACRBB_LOAD = 4;
	CIAB_DSKSEL1 = 4;
	INTF_AUD1 = $100;
	CIAB_DSKSEL2 = 5;
	INTF_AUD2 = $200;
	CIACRBB_INMODE0 = 5;
	CIAB_DSKSEL3 = 6;
	INTF_AUD3 = $400;
	CIACRBB_INMODE1 = 6;
	CIACRAF_LOAD = $10;
	CIAF_DSKSEL0 = 8;
	DMAB_DISK = 4;
	ADKB_FAST = 8;
	CIACRBF_LOAD = $10;
	CIAF_DSKSEL1 = $10;
	A_XOR_C = $5A;
	CIAF_DSKSEL2 = $20;
	INTB_COPER = 4;
	CIACRBF_INMODE0 = $20;
	CIAF_DSKSEL3 = $40;
	CIACRBF_INMODE1 = $40;
	DMAF_DISK = $10;
	ADKF_FAST = $100;
	CIACRAB_START = 0;
	CIACRBB_START = 0;
	INTF_COPER = $10;
	CIACRBF_IN_TA = $40;
	INTB_INTEN = $E;
	CIACRAF_START = 1;
	ABNC = $40;
	ANBC = $20;
	NABC = 8;
	CIACRBF_START = 1;
	CIAB_LED = 1;
	CIACRAB_PBON = 1;
	INTF_INTEN = $4000;
	ADKB_USE0P1 = 4;
	CIACRBB_PBON = 1;
	INTB_VERTB = 5;
	CIAB_DSKSIDE = 2;
	ADKB_USE1P2 = 5;
	A_OR_B = $FC;
	CIAF_LED = 2;
	A_OR_C = $FA;
	CIACRAF_PBON = 2;
	ADKB_USE2P3 = 6;
	ADKF_USE0P1 = $10;
	CIAICRB_ALRM = 2;
	CIACRBF_PBON = 2;
	INTF_VERTB = $20;
	HSIZEMASK = $3F;
	CIAF_DSKSIDE = 4;
	INTB_EXTER = $D;
	ADKB_USE0V1 = 0;
	ADKF_USE1P2 = $20;
	A_TO_D = $F0;
	SIGNFLAG = $40;
	ADKB_MFMPREC = $C;
	DMAB_BLTDONE = $E;
	ADKB_USE1V2 = 1;
	ADKF_USE2P3 = $40;
	LINEMODE = 1;
	CIAICRF_ALRM = 4;
	CIAB_DSKMOTOR = 7;
	DMAB_BLITHOG = $A;
	INTF_EXTER = $2000;
	ADKB_USE2V3 = 2;
	ADKF_USE0V1 = 1;
	DMAB_BLTNZERO = $D;
	ADKF_MFMPREC = $1000;
	HSIZEBITS = 6;
	DMAF_ALL = $1FF;
	DMAF_BLTDONE = $4000;
	ADKF_USE1V2 = 2;
	MINBYTESPERROW = $80;
	CIAF_DSKMOTOR = $80;
	DMAF_BLITHOG = $400;
	INTB_BLIT = 6;
	ADKF_USE2V3 = 4;
	MAXBYTESPERROW = $1000;
	DMAF_BLTNZERO = $2000;
	CIACRBF_IN_CNT_TA = $60;
	ADKB_WORDSYNC = $A;
	INTF_BLIT = $40;
	VSIZEMASK = $3FF;
	SRCA = $800;
	SRCB = $400;
	CIACRBF_IN_PHI2 = 0;
	ADKF_WORDSYNC = $400;
	ABC = $80;
	SRCC = $200;
	CLEANME = $40;
	DMAB_BLITTER = 6;
	INTB_PORTS = 3;
	CIAICRB_FLG = 4;
	ADKB_UARTBRK = $B;
	CIAB_DSKSTEP = 0;


var
	ciaa:	pCIA	absolute $BFE001;
	ciab:	pCIA	absolute $BFD000;
	custom:	pCustom	absolute $DFF000;


IMPLEMENTATION
end.
