1 { 2 This file is part of the Free Pascal run time library. 3 Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu> 4 5 Hardware definitions unit for MorphOS/PowerPC 6 7 MorphOS port was done on a free Pegasos II/G4 machine 8 provided by Genesi S.a.r.l. <www.genesi.lu> 9 10 See the file COPYING.FPC, included in this distribution, 11 for details about the copyright. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 17 **********************************************************************} 18 19 {$PACKRECORDS 2} 20 unit hardware; 21 22 interface 23 24 uses exec; 25 26 27 28 { * adkcon bit defines 29 * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. 30 * } 31 32 const 33 ADKB_SETCLR = 15; 34 ADKB_PRECOMP1 = 14; 35 ADKB_PRECOMP0 = 13; 36 ADKB_MFMPREC = 12; 37 ADKB_UARTBRK = 11; 38 ADKB_WORDSYNC = 10; 39 ADKB_MSBSYNC = 9; 40 ADKB_FAST = 8; 41 ADKB_USE3PN = 7; 42 ADKB_USE2P3 = 6; 43 ADKB_USE1P2 = 5; 44 ADKB_USE0P1 = 4; 45 ADKB_USE3VN = 3; 46 ADKB_USE2V3 = 2; 47 ADKB_USE1V2 = 1; 48 ADKB_USE0V1 = 0; 49 50 const 51 ADKF_SETCLR = (1 Shl ADKB_SETCLR); 52 ADKF_PRECOMP1 = (1 Shl ADKB_PRECOMP1); 53 ADKF_PRECOMP0 = (1 Shl ADKB_PRECOMP0); 54 ADKF_MFMPREC = (1 Shl ADKB_MFMPREC); 55 ADKF_UARTBRK = (1 Shl ADKB_UARTBRK); 56 ADKF_WORDSYNC = (1 Shl ADKB_WORDSYNC); 57 ADKF_MSBSYNC = (1 Shl ADKB_MSBSYNC); 58 ADKF_FAST = (1 Shl ADKB_FAST); 59 ADKF_USE3PN = (1 Shl ADKB_USE3PN); 60 ADKF_USE2P3 = (1 Shl ADKB_USE2P3); 61 ADKF_USE1P2 = (1 Shl ADKB_USE1P2); 62 ADKF_USE0P1 = (1 Shl ADKB_USE0P1); 63 ADKF_USE3VN = (1 Shl ADKB_USE3VN); 64 ADKF_USE2V3 = (1 Shl ADKB_USE2V3); 65 ADKF_USE1V2 = (1 Shl ADKB_USE1V2); 66 ADKF_USE0V1 = (1 Shl ADKB_USE0V1); 67 68 const 69 ADKF_PRE000NS = 0; 70 ADKF_PRE140NS = (ADKF_PRECOMP0); 71 ADKF_PRE280NS = (ADKF_PRECOMP1); 72 ADKF_PRE560NS = (ADKF_PRECOMP0 or ADKF_PRECOMP1); 73 74 75 76 { * blitter defines 77 * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. 78 * } 79 80 const 81 HSIZEBITS = 6; 82 VSIZEBITS = (16 - HSIZEBITS); 83 HSIZEMASK = $3F; 84 VSIZEMASK = $3FF; 85 86 {$IFNDEF NO_BIG_BLITS} 87 MINBYTESPERROW = 128; 88 MAXBYTESPERROW = 4096; 89 {$ELSE} 90 MAXBYTESPERROW = 128; 91 {$ENDIF} 92 93 const 94 ABC = $80; 95 ABNC = $40; 96 ANBC = $20; 97 ANBNC = $10; 98 NABC = $8; 99 NABNC = $4; 100 NANBC = $2; 101 NANBNC = $1; 102 103 const 104 A_OR_B = (ABC or ANBC or NABC or ABNC or ANBNC or NABNC); 105 A_OR_C = (ABC or NABC or ABNC or ANBC or NANBC or ANBNC); 106 A_XOR_C = (NABC or ABNC or NANBC or ANBNC); 107 A_TO_D = (ABC or ANBC or ABNC or ANBNC); 108 109 const 110 BC0B_DEST = 8; 111 BC0B_SRCC = 9; 112 BC0B_SRCB = 10; 113 BC0B_SRCA = 11; 114 BC0F_DEST = (1 Shl BC0B_DEST); 115 BC0F_SRCC = (1 Shl BC0B_SRCC); 116 BC0F_SRCB = (1 Shl BC0B_SRCB); 117 BC0F_SRCA = (1 Shl BC0B_SRCA); 118 119 BC1F_DESC = 2; 120 121 DEST = BC0F_DEST; 122 SRCC = BC0F_SRCC; 123 SRCB = BC0F_SRCB; 124 SRCA = BC0F_SRCA; 125 126 ASHIFTSHIFT = 12; 127 BSHIFTSHIFT = 12; 128 129 const 130 LINEMODE = $1; 131 FILL_OR = $8; 132 FILL_XOR = $10; 133 FILL_CARRYIN = $4; 134 ONEDOT = $2; 135 OVFLAG = $20; 136 SIGNFLAG = $40; 137 BLITREVERSE = $2; 138 139 SUD = $10; 140 SUL = $8; 141 AUL = $4; 142 143 OCTANT8 = 24; 144 OCTANT7 = 4; 145 OCTANT6 = 12; 146 OCTANT5 = 28; 147 OCTANT4 = 20; 148 OCTANT3 = 8; 149 OCTANT2 = 0; 150 OCTANT1 = 16; 151 152 type 153 Pbltnode = ^Tbltnode; 154 Tbltnode = record 155 n : Pbltnode; Pointernull156 _function: Pointer; 157 stat : Byte; 158 blitsize : SmallInt; 159 beamsync : SmallInt; 160 cleanup : Pointer; 161 end; 162 163 const 164 CLEANUP = $40; 165 CLEANME = CLEANUP; 166 167 168 169 { * byteswap routines 170 * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. 171 * } 172 {$WARNING Byteswap macros not yet converted!} 173 174 175 176 { * cia registers and bits 177 * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. 178 * } 179 180 181 type 182 PCIA = ^TCIA; 183 TCIA = record 184 ciapra : Byte; 185 pad0 : Array[0..254] of Byte; 186 ciaprb : Byte; 187 pad1 : array[0..254] of Byte; 188 ciaddra : Byte; 189 pad2 : array[0..254] of Byte; 190 ciaddrb : Byte; 191 pad3 : array[0..254] of Byte; 192 ciatalo : Byte; 193 pad4 : array[0..254] of Byte; 194 ciatahi : Byte; 195 pad5 : array[0..254] of Byte; 196 ciatblo : Byte; 197 pad6 : array[0..254] of Byte; 198 ciatbhi : Byte; 199 pad7 : array[0..254] of Byte; 200 ciatodlow: Byte; 201 pad8 : array[0..254] of Byte; 202 ciatodmid: Byte; 203 pad9 : array[0..254] of Byte; 204 ciatodhi : Byte; 205 pad10 : array[0..254] of Byte; 206 unusedreg: Byte; 207 pad11 : array[0..254] of Byte; 208 ciasdr : Byte; 209 pad12 : array[0..254] of Byte; 210 ciaicr : Byte; 211 pad13 : array[0..254] of Byte; 212 ciacra : Byte; 213 pad14 : array[0..254] of Byte; 214 ciacrb : Byte; 215 end; 216 217 const 218 CIAICRB_TA = 0; 219 CIAICRB_TB = 1; 220 CIAICRB_ALRM = 2; 221 CIAICRB_SP = 3; 222 CIAICRB_FLG = 4; 223 CIAICRB_IR = 7; 224 CIAICRB_SETCLR = 7; 225 226 CIAICRF_TA = (1 Shl CIAICRB_TA); 227 CIAICRF_TB = (1 Shl CIAICRB_TB); 228 CIAICRF_ALRM = (1 Shl CIAICRB_ALRM); 229 CIAICRF_SP = (1 Shl CIAICRB_SP); 230 CIAICRF_FLG = (1 Shl CIAICRB_FLG); 231 CIAICRF_IR = (1 Shl CIAICRB_IR); 232 CIAICRF_SETCLR = (1 Shl CIAICRB_SETCLR); 233 234 const 235 CIACRAB_START = 0; 236 CIACRAB_PBON = 1; 237 CIACRAB_OUTMODE = 2; 238 CIACRAB_RUNMODE = 3; 239 CIACRAB_LOAD = 4; 240 CIACRAB_INMODE = 5; 241 CIACRAB_SPMODE = 6; 242 CIACRAB_TODIN = 7; 243 244 CIACRAF_START = (1 Shl CIACRAB_START); 245 CIACRAF_PBON = (1 Shl CIACRAB_PBON); 246 CIACRAF_OUTMODE = (1 Shl CIACRAB_OUTMODE); 247 CIACRAF_RUNMODE = (1 Shl CIACRAB_RUNMODE); 248 CIACRAF_LOAD = (1 Shl CIACRAB_LOAD); 249 CIACRAF_INMODE = (1 Shl CIACRAB_INMODE); 250 CIACRAF_SPMODE = (1 Shl CIACRAB_SPMODE); 251 CIACRAF_TODIN = (1 Shl CIACRAB_TODIN); 252 253 const 254 CIACRBB_START = 0; 255 CIACRBB_PBON = 1; 256 CIACRBB_OUTMODE = 2; 257 CIACRBB_RUNMODE = 3; 258 CIACRBB_LOAD = 4; 259 CIACRBB_INMODE0 = 5; 260 CIACRBB_INMODE1 = 6; 261 CIACRBB_ALARM = 7; 262 263 CIACRBF_START = (1 Shl CIACRBB_START); 264 CIACRBF_PBON = (1 Shl CIACRBB_PBON); 265 CIACRBF_OUTMODE = (1 Shl CIACRBB_OUTMODE); 266 CIACRBF_RUNMODE = (1 Shl CIACRBB_RUNMODE); 267 CIACRBF_LOAD = (1 Shl CIACRBB_LOAD); 268 CIACRBF_INMODE0 = (1 Shl CIACRBB_INMODE0); 269 CIACRBF_INMODE1 = (1 Shl CIACRBB_INMODE1); 270 CIACRBF_ALARM = (1 Shl CIACRBB_ALARM); 271 272 const 273 CIACRBF_IN_PHI2 = 0; 274 CIACRBF_IN_CNT = (CIACRBF_INMODE0); 275 CIACRBF_IN_TA = (CIACRBF_INMODE1); 276 CIACRBF_IN_CNT_TA = (CIACRBF_INMODE0 or CIACRBF_INMODE1); 277 278 const 279 CIAB_GAMEPORT1 = (7); 280 CIAB_GAMEPORT0 = (6); 281 CIAB_DSKRDY = (5); 282 CIAB_DSKTRACK0 = (4); 283 CIAB_DSKPROT = (3); 284 CIAB_DSKCHANGE = (2); 285 CIAB_LED = (1); 286 CIAB_OVERLAY = (0); 287 288 CIAF_GAMEPORT1 = (1 Shl CIAB_GAMEPORT1); 289 CIAF_GAMEPORT0 = (1 Shl CIAB_GAMEPORT0); 290 CIAF_DSKRDY = (1 Shl CIAB_DSKRDY); 291 CIAF_DSKTRACK0 = (1 Shl CIAB_DSKTRACK0); 292 CIAF_DSKPROT = (1 Shl CIAB_DSKPROT); 293 CIAF_DSKCHANGE = (1 Shl CIAB_DSKCHANGE); 294 CIAF_LED = (1 Shl CIAB_LED); 295 CIAF_OVERLAY = (1 Shl CIAB_OVERLAY); 296 297 const 298 CIAB_COMDTR = (7); 299 CIAB_COMRTS = (6); 300 CIAB_COMCD = (5); 301 CIAB_COMCTS = (4); 302 CIAB_COMDSR = (3); 303 CIAB_PRTRSEL = (2); 304 CIAB_PRTRPOUT = (1); 305 CIAB_PRTRBUSY = (0); 306 307 CIAF_COMDTR = (1 Shl CIAB_COMDTR); 308 CIAF_COMRTS = (1 Shl CIAB_COMRTS); 309 CIAF_COMCD = (1 Shl CIAB_COMCD); 310 CIAF_COMCTS = (1 Shl CIAB_COMCTS); 311 CIAF_COMDSR = (1 Shl CIAB_COMDSR); 312 CIAF_PRTRSEL = (1 Shl CIAB_PRTRSEL); 313 CIAF_PRTRPOUT = (1 Shl CIAB_PRTRPOUT); 314 CIAF_PRTRBUSY = (1 Shl CIAB_PRTRBUSY); 315 316 const 317 CIAB_DSKMOTOR = (7); 318 CIAB_DSKSEL3 = (6); 319 CIAB_DSKSEL2 = (5); 320 CIAB_DSKSEL1 = (4); 321 CIAB_DSKSEL0 = (3); 322 CIAB_DSKSIDE = (2); 323 CIAB_DSKDIREC = (1); 324 CIAB_DSKSTEP = (0); 325 326 CIAF_DSKMOTOR = (1 Shl CIAB_DSKMOTOR); 327 CIAF_DSKSEL3 = (1 Shl CIAB_DSKSEL3); 328 CIAF_DSKSEL2 = (1 Shl CIAB_DSKSEL2); 329 CIAF_DSKSEL1 = (1 Shl CIAB_DSKSEL1); 330 CIAF_DSKSEL0 = (1 Shl CIAB_DSKSEL0); 331 CIAF_DSKSIDE = (1 Shl CIAB_DSKSIDE); 332 CIAF_DSKDIREC = (1 Shl CIAB_DSKDIREC); 333 CIAF_DSKSTEP = (1 Shl CIAB_DSKSTEP); 334 335 336 337 { * custom-chip registers and bits 338 * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. 339 * } 340 341 type 342 PAudChannel = ^TAudChannel; 343 TAudChannel = record 344 ac_ptr: Pointer; 345 ac_len: Word; 346 ac_per: Word; 347 ac_vol: Word; 348 ac_dat: Word; 349 ac_pad: array[0..1] of Word; 350 end; 351 352 PSpriteDef = ^TSpriteDef; 353 TSpriteDef = record 354 pos : Word; 355 ctl : Word; 356 dataa: Word; 357 datab: Word; 358 end; 359 360 PCustom = ^TCustom; 361 TCustom = record 362 bltddat : Word; 363 dmaconr : Word; 364 vposr : Word; 365 vhposr : Word; 366 dskdatr : Word; 367 joy0dat : Word; 368 joy1dat : Word; 369 clxdat : Word; 370 adkconr : Word; 371 pot0dat : Word; 372 pot1dat : Word; 373 potinp : Word; 374 serdatr : Word; 375 dskbytr : Word; 376 intenar : Word; 377 intreqr : Word; 378 dskpt : Pointer; 379 dsklen : Word; 380 dskdat : Word; 381 refptr : Word; 382 vposw : Word; 383 vhposw : Word; 384 copcon : Word; 385 serdat : Word; 386 serper : Word; 387 potgo : Word; 388 joytest : Word; 389 strequ : Word; 390 strvbl : Word; 391 strhor : Word; 392 strlong : Word; 393 bltcon0 : Word; 394 bltcon1 : Word; 395 bltafwm : Word; 396 bltalwm : Word; 397 bltcpt : Pointer; 398 bltbpt : Pointer; 399 bltapt : Pointer; 400 bltdpt : Pointer; 401 bltsize : Word; 402 pad2d : Byte; 403 bltcon0l: Byte; 404 bltsizv : Word; 405 bltsizh : Word; 406 bltcmod : Word; 407 bltbmod : Word; 408 bltamod : Word; 409 bltdmod : Word; 410 pad34 : array[0..3] of Word; 411 bltcdat : Word; 412 bltbdat : Word; 413 bltadat : Word; 414 pad3b : array[0..2] of Word; 415 deniseid: Word; 416 dsksync : Word; 417 cop1lc : Longint; 418 cop2lc : Longint; 419 copjmp1 : Word; 420 copjmp2 : Word; 421 copins : Word; 422 diwstrt : Word; 423 diwstop : Word; 424 ddfstrt : Word; 425 ddfstop : Word; 426 dmacon : Word; 427 clxcon : Word; 428 intena : Word; 429 intreq : Word; 430 adkcon : Word; 431 aud : array[0..3] of TAudChannel; 432 bplpt : array[0..7] of Pointer; 433 bplcon0 : Word; 434 bplcon1 : Word; 435 bplcon2 : Word; 436 bplcon3 : Word; 437 bpl1mod : Word; 438 bpl2mod : Word; 439 bplcon4 : Word; 440 clxcon2 : Word; 441 bpldat : array[0..7] of Word; 442 sprpt : array[0..7] of Pointer; 443 spr : array[0..7] of TSpriteDef; 444 color : array[0..31] of Word; 445 htotal : Word; 446 hsstop : Word; 447 hbstrt : Word; 448 hbstop : Word; 449 vtotal : Word; 450 vsstop : Word; 451 vbstrt : Word; 452 vbstop : Word; 453 sprhstrt: Word; 454 sprhstop: Word; 455 bplhstrt: Word; 456 bplhstop: Word; 457 hhposw : Word; 458 hhposr : Word; 459 beamcon0: Word; 460 hsstrt : Word; 461 vsstrt : Word; 462 hcenter : Word; 463 diwhigh : Word; 464 padf3 : array[0..10] of Word; 465 fmode : Word; 466 end; 467 468 469 const 470 VARVBLANK = $1000; 471 LOLDIS = $0800; 472 CSCBLANKEN = $0400; 473 VARVSYNC = $0200; 474 VARHSYNC = $0100; 475 VARBEAM = $0080; 476 DISPLAYDUAL = $0040; 477 DISPLAYPAL = $0020; 478 VARCSYNC = $0010; 479 CSBLANK = $0008; 480 CSYNCTRUE = $0004; 481 VSYNCTRUE = $0002; 482 HSYNCTRUE = $0001; 483 484 USE_BPLCON3 = 1; 485 486 BPLCON2_ZDCTEN = (1 Shl 10); 487 BPLCON2_ZDBPEN = (1 Shl 11); 488 BPLCON2_ZDBPSEL0 = (1 Shl 12); 489 BPLCON2_ZDBPSEL1 = (1 Shl 13); 490 BPLCON2_ZDBPSEL2 = (1 Shl 14); 491 492 BPLCON3_EXTBLNKEN = (1 Shl 0); 493 BPLCON3_EXTBLKZD = (1 Shl 1); 494 BPLCON3_ZDCLKEN = (1 Shl 2); 495 BPLCON3_BRDNTRAN = (1 Shl 4); 496 BPLCON3_BRDNBLNK = (1 Shl 5); 497 498 499 500 { * dma bits 501 * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. 502 * } 503 504 const 505 DMAB_AUD0 = 0; 506 DMAB_AUD1 = 1; 507 DMAB_AUD2 = 2; 508 DMAB_AUD3 = 3; 509 DMAB_DISK = 4; 510 DMAB_SPRITE = 5; 511 DMAB_BLITTER = 6; 512 DMAB_COPPER = 7; 513 DMAB_RASTER = 8; 514 DMAB_MASTER = 9; 515 DMAB_BLITHOG = 10; 516 DMAB_BLTNZERO = 13; 517 DMAB_BLTDONE = 14; 518 DMAB_SETCLR = 15; 519 520 DMAF_AUD0 = (1 Shl DMAB_AUD0); 521 DMAF_AUD1 = (1 Shl DMAB_AUD1); 522 DMAF_AUD2 = (1 Shl DMAB_AUD2); 523 DMAF_AUD3 = (1 Shl DMAB_AUD3); 524 DMAF_DISK = (1 Shl DMAB_DISK); 525 DMAF_SPRITE = (1 Shl DMAB_SPRITE); 526 DMAF_BLITTER = (1 Shl DMAB_BLITTER); 527 DMAF_COPPER = (1 Shl DMAB_COPPER); 528 DMAF_RASTER = (1 Shl DMAB_RASTER); 529 DMAF_MASTER = (1 Shl DMAB_MASTER); 530 DMAF_BLITHOG = (1 Shl DMAB_BLITHOG); 531 DMAF_BLTNZERO = (1 Shl DMAB_BLTNZERO); 532 DMAF_BLTDONE = (1 Shl DMAB_BLTDONE); 533 DMAF_SETCLR = (1 Shl DMAB_SETCLR); 534 535 const 536 DMAF_AUDIO = (DMAF_AUD0 or DMAF_AUD1 or DMAF_AUD2 or DMAF_AUD3); 537 DMAF_ALL = (DMAF_AUD0 or DMAF_AUD1 or DMAF_AUD2 or DMAF_AUD3 or DMAF_DISK or DMAF_SPRITE or DMAF_BLITTER or DMAF_COPPER or DMAF_RASTER); 538 539 540 541 { * interrupt bits 542 * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved. 543 * } 544 545 const 546 INTB_SETCLR = (15); 547 INTB_INTEN = (14); 548 INTB_EXTER = (13); 549 INTB_DSKSYNC = (12); 550 INTB_RBF = (11); 551 INTB_AUD3 = (10); 552 INTB_AUD2 = (9); 553 INTB_AUD1 = (8); 554 INTB_AUD0 = (7); 555 INTB_BLIT = (6); 556 INTB_VERTB = (5); 557 INTB_COPER = (4); 558 INTB_PORTS = (3); 559 INTB_SOFTINT = (2); 560 INTB_DSKBLK = (1); 561 INTB_TBE = (0); 562 563 INTF_SETCLR = (1 Shl INTB_SETCLR); 564 INTF_INTEN = (1 Shl INTB_INTEN); 565 INTF_EXTER = (1 Shl INTB_EXTER); 566 INTF_DSKSYNC = (1 Shl INTB_DSKSYNC); 567 INTF_RBF = (1 Shl INTB_RBF); 568 INTF_AUD3 = (1 Shl INTB_AUD3); 569 INTF_AUD2 = (1 Shl INTB_AUD2); 570 INTF_AUD1 = (1 Shl INTB_AUD1); 571 INTF_AUD0 = (1 Shl INTB_AUD0); 572 INTF_BLIT = (1 Shl INTB_BLIT); 573 INTF_VERTB = (1 Shl INTB_VERTB); 574 INTF_COPER = (1 Shl INTB_COPER); 575 INTF_PORTS = (1 Shl INTB_PORTS); 576 INTF_SOFTINT = (1 Shl INTB_SOFTINT); 577 INTF_DSKBLK = (1 Shl INTB_DSKBLK); 578 INTF_TBE = (1 Shl INTB_TBE); 579 580 implementation 581 582 end. 583