C-ify iodone, irq

This commit is contained in:
Romain Dolbeau 2022-10-05 22:41:27 +02:00
parent 0f20034ce3
commit 6943a54854
8 changed files with 81 additions and 65 deletions

View File

@ -36,8 +36,6 @@ _NuBusFPGACtl:
jsr cNuBusFPGACtl
MOVE.L (%A7)+, %a0
MOVE.L (%A7)+, %a1
BTST #9,%a0@(ioTrap) /* noQueueBit is 9 */
BEQ.S _GoIODone
rts
_NuBusFPGAStatus:
@ -46,8 +44,6 @@ _NuBusFPGAStatus:
jsr cNuBusFPGAStatus
MOVE.L (%A7)+, %a0
MOVE.L (%A7)+, %a1
BTST #9,%a0@(ioTrap) /* noQueueBit is 9 */
BEQ.S _GoIODone
rts
_NuBusFPGAClose:
@ -57,12 +53,6 @@ _NuBusFPGAClose:
MOVE.L (%A7)+, %a0
MOVE.L (%A7)+, %a1
rts
_GoIODone:
/* MOVEA.L JIODone,%A0 */
/* JMP (%A0) */
movel JIODone,%sp@-
rts
.include "NuBusFPGADrvr_OpenClose.s"
.text
@ -71,20 +61,4 @@ _GoIODone:
.include "NuBusFPGADrvr_Status.s"
.text
ALIGN 2
interruptRoutine:
moveal %a1,%a0
addal #0x0090000c,%a0 /* FIXME */
MOVEQ #1,%D0
_SwapMMUMode
clrb %a0@ /* we only need to write */
_SwapMMUMode
movel %a1,%d0
roll #8,%d0
andiw #15,%d0
moveal 0xd28,%a0 /* JVBLTask */
jsr (%a0)
moveq #1,%d0
rts
ALIGN 2

View File

@ -78,13 +78,12 @@ OSErr cNuBusFPGACtl(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
NuBusFPGADriverGlobalsHdl dStoreHdl = (NuBusFPGADriverGlobalsHdl)dce->dCtlStorage;
NuBusFPGADriverGlobalsPtr dStore = *dStoreHdl;
short ret = -1;
short ret = noErr;
char busMode = 1;
/* write_reg(dce, GOBOFB_DEBUG, 0xBEEF0001); */
/* write_reg(dce, GOBOFB_DEBUG, pb->csCode); */
#if 1
switch (pb->csCode)
{
case -1:
@ -171,16 +170,19 @@ OSErr cNuBusFPGACtl(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
if (gammaTbl == NULL) {
linearGamma(dStore);
} else {
ret = noErr;
if (gammaTbl->gDataWidth != 8)
return paramErr;
ret = paramErr;
if (gammaTbl->gDataCnt != 256) // 8-bits
return paramErr;
ret = paramErr;
if ((gammaTbl->gChanCnt != 1) && (gammaTbl->gChanCnt != 3))
return paramErr;
ret = paramErr;
if ((gammaTbl->gType != 0) && (gammaTbl->gType != 0xFFFFBEEF))
return paramErr;
ret = paramErr;
if (gammaTbl->gFormulaSize != 0)
return paramErr;
ret = paramErr;
if (ret != noErr)
goto done;
dStore->gamma.gVersion = gammaTbl->gVersion;
dStore->gamma.gType = gammaTbl->gType;
@ -215,8 +217,10 @@ OSErr cNuBusFPGACtl(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
const uint32_t wb = dStore->hres[0] >> idx;
unsigned short j, i;
short npage = (vPInfo->csMode == kDepthMode5) ? 1 : 2;
if (vPInfo->csPage >= npage)
if (vPInfo->csPage >= npage) {
return paramErr;
goto done;
}
a32 += vPInfo->csPage * 1024 * 1024 * 4; /* fixme */
@ -297,7 +301,7 @@ OSErr cNuBusFPGACtl(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
case cscDirectSetEntries: /* 0x8 */
asm volatile(".word 0xfe16\n");
return controlErr;
ret = controlErr;
break;
case cscSetDefaultMode: /* 0x9 */
@ -351,7 +355,11 @@ OSErr cNuBusFPGACtl(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
ret = controlErr;
break;
}
#endif
done:
if (!(pb->ioTrap & (1<<noQueueBit)))
IODone(dce, ret);
return ret;
}
@ -359,7 +367,7 @@ OSErr reconfHW(AuxDCEPtr dce, unsigned char mode, unsigned char depth, unsigned
NuBusFPGADriverGlobalsHdl dStoreHdl = (NuBusFPGADriverGlobalsHdl)dce->dCtlStorage;
NuBusFPGADriverGlobalsPtr dStore = *dStoreHdl;
const short npage = (depth == kDepthMode5) ? 1 : 2;
OSErr err = noErr;
OSErr err = -1;
char busMode = 1;
/* write_reg(dce, GOBOFB_DEBUG, 0xBEEF0031); */

View File

@ -2,6 +2,20 @@
#include "ROMDefs.h"
typedef void(*vblproto)(short);
#pragma parameter __D0 fbIrq(__A1)
short fbIrq(const long sqParameter){
/* AuxDCEPtr dce = (AuxDCEPtr)sqParameter; */
/* NuBusFPGADriverGlobalsHdl dStoreHdl = (NuBusFPGADriverGlobalsHdl)dce->dCtlStorage; */
/* NuBusFPGADriverGlobalsPtr dStore = *dStoreHdl; */
vblproto myVbl = *(vblproto**)0x0d28;
/* write_reg(dce, GOBOFB_INTR_CLEAR, 0); */
*((volatile unsigned int*)(sqParameter+GOBOFB_BASE+GOBOFB_INTR_CLEAR)) = 0;
myVbl((sqParameter>>24)&0xf);
return 1;
}
OSErr cNuBusFPGAOpen(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
{
OSErr ret = noErr;
@ -46,10 +60,17 @@ OSErr cNuBusFPGAOpen(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
siqel->sqType = sIQType;
siqel->sqPrio = 8;
//siqel->sqAddr = interruptRoutine;
/* not sure how to get the proper result in C... */
/* SlotIntServiceProcPtr sqAddr; */
/* asm("lea %%pc@(interruptRoutine),%0\n" : "=a"(sqAddr)); */
/* siqel->sqAddr = sqAddr; */
/* siqel->sqParm = (long)dce->dCtlDevBase; */
/* not sure how to get the proper result in C... */
SlotIntServiceProcPtr sqAddr;
asm("lea %%pc@(interruptRoutine),%0\n" : "=a"(sqAddr));
asm("lea %%pc@(fbIrq),%0\n" : "=a"(sqAddr));
siqel->sqAddr = sqAddr;
/* siqel->sqParm = (long)dce; */
siqel->sqParm = (long)dce->dCtlDevBase;
dStore->siqel = siqel;

View File

@ -76,8 +76,10 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
(vPInfo->csMode != kDepthMode3) &&
(vPInfo->csMode != kDepthMode4) &&
(vPInfo->csMode != kDepthMode5) &&
(vPInfo->csMode != kDepthMode6))
return paramErr;
(vPInfo->csMode != kDepthMode6)) {
ret = paramErr;
goto done;
}
vPInfo->csPage = (vPInfo->csMode == kDepthMode5) ? 1 : 2;
ret = noErr;
}
@ -90,11 +92,15 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
(vPInfo->csMode != kDepthMode3) &&
(vPInfo->csMode != kDepthMode4) &&
(vPInfo->csMode != kDepthMode5) &&
(vPInfo->csMode != kDepthMode6))
return paramErr;
(vPInfo->csMode != kDepthMode6)) {
ret = paramErr;
goto done;
}
short npage = (vPInfo->csMode == kDepthMode5) ? 1 : 2;
if (vPInfo->csPage >= npage)
return paramErr;
if (vPInfo->csPage >= npage) {
ret = paramErr;
goto done;
}
vPInfo->csBaseAddr = vPInfo->csPage * 1024 * 1024 * 4; /* fixme for > 2 pages ? */
ret = noErr;
}
@ -176,8 +182,10 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
if (((((UInt8)vdtim->csTimingMode) < nativeVidMode) ||
(((UInt8)vdtim->csTimingMode) > dStore->maxMode)) &&
(vdtim->csTimingMode != kDisplayModeIDFindFirstResolution) &&
(vdtim->csTimingMode != kDisplayModeIDCurrent))
return paramErr;
(vdtim->csTimingMode != kDisplayModeIDCurrent)) {
ret = paramErr;
goto done;
}
unsigned int mode = vdtim->csTimingMode;
if (mode == kDisplayModeIDFindFirstResolution)
mode = nativeVidMode;
@ -238,8 +246,10 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
{
default:
if ((((UInt8)vdres->csPreviousDisplayModeID) < nativeVidMode) ||
(((UInt8)vdres->csPreviousDisplayModeID) > dStore->maxMode))
return paramErr;
(((UInt8)vdres->csPreviousDisplayModeID) > dStore->maxMode)) {
ret = paramErr;
goto done;
}
if (((UInt8)vdres->csPreviousDisplayModeID) == dStore->maxMode)
vdres->csDisplayModeID = kDisplayModeIDNoMoreResolutions;
else
@ -274,15 +284,19 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
if (((((UInt8)vdparam->csDisplayModeID) < nativeVidMode) ||
(((UInt8)vdparam->csDisplayModeID) > dStore->maxMode)) &&
(vdparam->csDisplayModeID != kDisplayModeIDFindFirstResolution) &&
(vdparam->csDisplayModeID != kDisplayModeIDCurrent))
return paramErr;
(vdparam->csDisplayModeID != kDisplayModeIDCurrent)) {
ret = paramErr;
goto done;
}
if ((vdparam->csDepthMode != kDepthMode1) &&
(vdparam->csDepthMode != kDepthMode2) &&
(vdparam->csDepthMode != kDepthMode3) &&
(vdparam->csDepthMode != kDepthMode4) &&
(vdparam->csDepthMode != kDepthMode5) &&
(vdparam->csDepthMode != kDepthMode6))
return paramErr;
(vdparam->csDepthMode != kDepthMode6)) {
ret = paramErr;
goto done;
}
/* write_reg(dce, GOBOFB_DEBUG, 0xBEEF0022); */
/* write_reg(dce, GOBOFB_DEBUG, (unsigned int)vdparam->csDisplayModeID); */
/* write_reg(dce, GOBOFB_DEBUG, (unsigned int)vdparam->csDepthMode); */
@ -385,5 +399,8 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
break;
}
#endif
done:
if (!(pb->ioTrap & (1<<noQueueBit)))
IODone(dce, ret);
return ret;
}

View File

@ -36,8 +36,6 @@ _NuBusFPGARAMDskPrime:
jsr cNuBusFPGARAMDskPrime
MOVE.L (%A7)+, %a0
MOVE.L (%A7)+, %a1
BTST #9,%a0@(ioTrap) /* noQueueBit is 9 */
BEQ.S _RAMDskGoIODone
rts
_NuBusFPGARAMDskCtl:
@ -46,8 +44,6 @@ _NuBusFPGARAMDskCtl:
jsr cNuBusFPGARAMDskCtl
MOVE.L (%A7)+, %a0
MOVE.L (%A7)+, %a1
BTST #9,%a0@(ioTrap) /* noQueueBit is 9 */
BEQ.S _RAMDskGoIODone
rts
_NuBusFPGARAMDskStatus:
@ -56,8 +52,6 @@ _NuBusFPGARAMDskStatus:
jsr cNuBusFPGARAMDskStatus
MOVE.L (%A7)+, %a0
MOVE.L (%A7)+, %a1
BTST #9,%a0@(ioTrap) /* noQueueBit is 9 */
BEQ.S _RAMDskGoIODone
rts
_NuBusFPGARAMDskClose:
@ -66,6 +60,7 @@ _NuBusFPGARAMDskClose:
jsr cNuBusFPGARAMDskClose
MOVE.L (%A7)+, %a0
MOVE.L (%A7)+, %a1
rts
MyAddDrive:
LINK %A6,#0
@ -77,12 +72,6 @@ MyAddDrive:
DC.W 0xA04E /* _AddDrive */
UNLK %A6
RTS
_RAMDskGoIODone:
/* MOVEA.L JIODone,%A0 */
/* JMP (%A0) */
movel JIODone,%sp@-
rts
.include "NuBusFPGARAMDskDrvr_OpenClose.s"
.text

View File

@ -26,5 +26,7 @@ OSErr cNuBusFPGARAMDskCtl(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
}
done:
if (!(pb->ioTrap & (1<<noQueueBit)))
IODone(dce, ret);
return ret;
}

View File

@ -197,5 +197,8 @@ OSErr cNuBusFPGARAMDskPrime(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
}
done:
if (!(pb->ioTrap & (1<<noQueueBit)))
IODone(dce, ret);
return ret;
}

View File

@ -23,5 +23,7 @@ OSErr cNuBusFPGARAMDskStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce)
}
done:
if (!(pb->ioTrap & (1<<noQueueBit)))
IODone(dce, ret);
return ret;
}