2023-05-22 16:17:35 +02:00
|
|
|
include "exec/memory.i"
|
|
|
|
include "dos/dosextens.i"
|
|
|
|
include "workbench/startup.i"
|
|
|
|
include "graphics/gfxbase.i"
|
|
|
|
IF FW_DO_FANCY_WORKBENCH_STUFF
|
|
|
|
include "graphics/view.i"
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
include "uae/uaestuff.i"
|
|
|
|
|
|
|
|
IFND CHIPMEM_SIZE
|
|
|
|
CHIPMEM_SIZE = 4
|
|
|
|
ENDC
|
|
|
|
IFND FASTMEM_SIZE
|
|
|
|
FASTMEM_SIZE = 4
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
bsr os_AppInit
|
|
|
|
|
|
|
|
IF FW_LMB_EXIT_SUPPORT
|
|
|
|
lea -4(sp),a0
|
|
|
|
move.l a0,fw_DemoAbortStackPointer(a6)
|
|
|
|
ENDC
|
|
|
|
|
2024-09-15 17:43:33 +02:00
|
|
|
PUTMSG 10,<"%d: Entrypoint: %p">,fw_FrameCounter-2(a6),#entrypoint
|
2023-05-22 16:17:35 +02:00
|
|
|
bsr entrypoint
|
2024-09-15 17:43:33 +02:00
|
|
|
PUTMSG 10,<"%d: Part terminated">,fw_FrameCounter-2(a6)
|
2023-05-22 16:17:35 +02:00
|
|
|
|
|
|
|
bra os_AppShutdown
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
; startup code
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
os_AppInit:
|
|
|
|
PUTMSG 10,<"AppInit %ld, %ld">,#CHIPMEM_SIZE,#FASTMEM_SIZE
|
|
|
|
IFGT DEBUG_DETAIL
|
|
|
|
UAEExitWarp
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
move.l 4.w,a6
|
2024-09-15 17:43:33 +02:00
|
|
|
IF DEBUG_DETAIL
|
|
|
|
move.l #MEMF_CHIP,d1
|
|
|
|
CALL AvailMem
|
|
|
|
PUTMSG 10,<"Chip memory free: %ld bytes">,d0
|
|
|
|
move.l #MEMF_CHIP|MEMF_LARGEST,d1
|
|
|
|
CALL AvailMem
|
|
|
|
PUTMSG 10,<"Chip memory largest: %ld bytes">,d0
|
|
|
|
move.l #MEMF_FAST,d1
|
|
|
|
CALL AvailMem
|
|
|
|
PUTMSG 10,<"Fast memory free: %ld bytes">,d0
|
|
|
|
move.l #MEMF_FAST|MEMF_LARGEST,d1
|
|
|
|
CALL AvailMem
|
|
|
|
PUTMSG 10,<"Fast memory largest: %ld bytes">,d0
|
|
|
|
ENDC
|
|
|
|
|
2023-05-22 16:17:35 +02:00
|
|
|
IFEQ FW_HD_TRACKMO_MODE
|
|
|
|
IFD pd_SIZEOF
|
|
|
|
move.l #pd_SIZEOF,d0
|
|
|
|
PUTMSG 10,<"Allocating framework memory (%ld) WITH PART data: %ld bytes">,#fw_SIZEOF,d0
|
|
|
|
ELSE
|
|
|
|
move.l #fw_SIZEOF,d0
|
|
|
|
PUTMSG 10,<"Allocating framework memory: %ld bytes (NO part data!)">,d0
|
|
|
|
ENDC
|
|
|
|
move.l d0,d2
|
|
|
|
move.l #MEMF_PUBLIC|MEMF_CLEAR,d1
|
|
|
|
CALL AllocMem
|
|
|
|
move.l d0,fw_BasePtr
|
|
|
|
bne.s .cont
|
|
|
|
moveq.l #ERROR_NO_FREE_STORE,d0
|
|
|
|
addq.w #4,sp
|
|
|
|
rts
|
|
|
|
.cont move.l d0,a4
|
|
|
|
move.l d0,fw_OrigBaseMemAllocAddr(a4)
|
|
|
|
move.l d2,fw_OrigBaseMemAllocLength(a4)
|
|
|
|
ELSE
|
|
|
|
move.l #fw_SIZEOF+6,d0 ; for InitData LVO
|
|
|
|
move.l d0,d2
|
|
|
|
move.l #MEMF_PUBLIC|MEMF_CLEAR,d1
|
|
|
|
CALL AllocMem
|
|
|
|
tst.l d0
|
|
|
|
beq.s .error
|
|
|
|
move.l d0,a0
|
|
|
|
move.w #%0100111011111001,(a0)+
|
|
|
|
move.l #fw_InitPart,(a0)+
|
|
|
|
move.l a0,fw_BasePtr
|
|
|
|
bra.s .cont
|
|
|
|
.error
|
|
|
|
moveq.l #ERROR_NO_FREE_STORE,d0
|
|
|
|
addq.w #4,sp
|
|
|
|
rts
|
|
|
|
.cont move.l a0,a4
|
|
|
|
move.l d0,fw_OrigBaseMemAllocAddr(a4)
|
|
|
|
move.l d2,fw_OrigBaseMemAllocLength(a4)
|
|
|
|
ENDC
|
|
|
|
move.l a4,fw_PartFwBase(a4)
|
|
|
|
move.l a4,fw_PrimaryFwBase(a4)
|
|
|
|
|
|
|
|
suba.l a1,a1
|
|
|
|
CALL FindTask
|
|
|
|
move.l d0,a2
|
|
|
|
tst.l pr_CLI(a2)
|
|
|
|
bne.s .cli
|
|
|
|
lea pr_MsgPort(a2),a0
|
|
|
|
CALL WaitPort
|
|
|
|
lea pr_MsgPort(a2),a0
|
|
|
|
CALL GetMsg
|
|
|
|
move.l d0,fw_WBMessage(a4)
|
|
|
|
.cli
|
|
|
|
moveq.l #ERROR_NO_FREE_STORE,d7
|
|
|
|
move.l #CHIPMEM_SIZE+(mfw_copperlistend-mfw_copperlist),d0
|
|
|
|
|
|
|
|
addq.l #7,d0
|
|
|
|
and.w #-8,d0
|
|
|
|
move.l d0,d2
|
|
|
|
move.l d0,fw_OrigChipMemAllocLength(a4)
|
|
|
|
move.l #MEMF_CHIP|MEMF_PUBLIC|MEMF_CLEAR,d1
|
|
|
|
CALL AllocMem
|
|
|
|
move.l d0,fw_OrigChipMemAllocAddr(a4)
|
|
|
|
beq os_AppAbort
|
|
|
|
move.l d0,fw_ChipMemStack(a4)
|
|
|
|
add.l d2,d0
|
|
|
|
move.l d0,fw_ChipMemStackEnd(a4)
|
|
|
|
|
|
|
|
IF FW_SINETABLE_SUPPORT
|
|
|
|
move.l #FASTMEM_SIZE+(1024+256)*2,d0
|
|
|
|
ELSE
|
|
|
|
move.l #FASTMEM_SIZE,d0
|
|
|
|
ENDC
|
|
|
|
move.l d0,d2
|
|
|
|
move.l d0,fw_OrigFastMemAllocLength(a4)
|
|
|
|
move.l #MEMF_ANY|MEMF_PUBLIC|MEMF_CLEAR,d1
|
|
|
|
CALL AllocMem
|
|
|
|
move.l d0,fw_OrigFastMemAllocAddr(a4)
|
|
|
|
beq os_AppAbort
|
|
|
|
move.l d0,fw_FastMemStack(a4)
|
|
|
|
add.l d2,d0
|
|
|
|
move.l d0,fw_FastMemStackEnd(a4)
|
|
|
|
|
|
|
|
IF DEBUG_DETAIL
|
|
|
|
move.l #MEMF_CHIP,d1
|
|
|
|
CALL AvailMem
|
|
|
|
PUTMSG 10,<"Chip memory free: %ld bytes">,d0
|
|
|
|
move.l #MEMF_CHIP|MEMF_LARGEST,d1
|
|
|
|
CALL AvailMem
|
|
|
|
PUTMSG 10,<"Chip memory largest: %ld bytes">,d0
|
|
|
|
move.l #MEMF_FAST,d1
|
|
|
|
CALL AvailMem
|
|
|
|
PUTMSG 10,<"Fast memory free: %ld bytes">,d0
|
|
|
|
ENDC
|
|
|
|
IF 0
|
|
|
|
PUTMSG 10,<"OpenResource">
|
|
|
|
move.w #ERROR_LOCK_COLLISION,d7
|
|
|
|
lea .ciabname(pc),a1
|
|
|
|
CALL OpenResource
|
|
|
|
move.l d0,fw_CiaBResource(a4)
|
|
|
|
beq os_AppAbort
|
|
|
|
move.l a6,a5
|
|
|
|
move.l d0,a6
|
|
|
|
|
|
|
|
PUTMSG 10,<"AddICRVector">
|
|
|
|
lea fw_SysFriendlyInterrupt(a4),a1
|
|
|
|
lea .nopirq(pc),a0
|
|
|
|
move.l a0,IS_CODE(a1)
|
|
|
|
moveq.l #CIAICRB_TB,d0
|
|
|
|
CALL AddICRVector
|
|
|
|
tst.l d0
|
|
|
|
beq.s .gottimer
|
|
|
|
move.l a5,a6
|
|
|
|
bra os_AppAbort
|
|
|
|
|
|
|
|
; No turning back at this point!
|
|
|
|
.gottimer
|
|
|
|
PUTMSG 10,<"AbleICR">
|
|
|
|
moveq.l #CIAICRF_TB,d0
|
|
|
|
CALL AbleICR
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
lea $dff000,a5
|
|
|
|
exg a4,a6 ; from now on, a6 is supposed to be our framework pointer, a5 is _custom
|
|
|
|
|
|
|
|
IF FW_MULTITASKING_SUPPORT
|
|
|
|
bsr fw_InitTasks
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
IF FW_DYNAMIC_MEMORY_SUPPORT
|
|
|
|
bsr fw_InitMemoryManagement
|
|
|
|
|
|
|
|
IF (FW_STANDALONE_FILE_MODE==0)|FW_HD_TRACKMO_MODE
|
|
|
|
IF FW_MULTITASKING_SUPPORT
|
|
|
|
move.l #ft_SIZEOF,d0
|
|
|
|
bsr fw_AllocFast
|
|
|
|
move.l a0,fw_TrackloaderTask(a6)
|
|
|
|
ENDC
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
moveq.l #mfw_copperlistend-mfw_copperlist,d0
|
|
|
|
bsr fw_AllocChip
|
|
|
|
move.l a0,a1
|
|
|
|
move.l a0,fw_BaseCopperlist(a6)
|
|
|
|
ELSE
|
|
|
|
IF (FW_STANDALONE_FILE_MODE==0)|FW_HD_TRACKMO_MODE
|
|
|
|
IF FW_MULTITASKING_SUPPORT
|
|
|
|
move.l fw_FastMemStack(a6),a0
|
|
|
|
move.l a0,fw_TrackloaderTask(a6)
|
|
|
|
lea ft_SIZEOF(a0),a0
|
|
|
|
move.l a0,fw_FastMemStack(a6)
|
|
|
|
ENDC
|
|
|
|
ENDC
|
|
|
|
move.l fw_ChipMemStack(a6),a1
|
|
|
|
lea mfw_copperlistend-mfw_copperlist(a1),a0
|
|
|
|
move.l a0,fw_ChipMemStack(a6)
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
lea mfw_copperlist(pc),a0
|
|
|
|
moveq.l #(mfw_copperlistend-mfw_copperlist)/4-1,d7
|
|
|
|
.cpyloop
|
|
|
|
move.l (a0)+,(a1)+
|
|
|
|
dbra d7,.cpyloop
|
|
|
|
|
|
|
|
subq.l #4,a1
|
|
|
|
move.l a1,fw_EmptySprite(a6)
|
|
|
|
|
|
|
|
lea fw_vblank_standard_irq(pc),a0
|
|
|
|
move.l a0,fw_DefaultIRQ(a6)
|
|
|
|
|
|
|
|
IF FW_SINETABLE_SUPPORT
|
|
|
|
bsr fw_InitSineTable
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
IF FW_HD_TRACKMO_MODE
|
|
|
|
move.l #diskimage,fw_TrackBuffer(a6)
|
|
|
|
|
|
|
|
bsr fw_InitDos
|
|
|
|
|
|
|
|
IF FW_DYNAMIC_MEMORY_SUPPORT
|
|
|
|
IF FW_MUSIC_SUPPORT
|
2024-09-15 17:43:33 +02:00
|
|
|
IF (FW_MUSIC_PLAYER_CHOICE>=4)&&(FW_MUSIC_PLAYER_CHOICE<=6)
|
2023-05-22 16:17:35 +02:00
|
|
|
bsr fw_MusicAlloc
|
|
|
|
ENDC
|
|
|
|
ENDC
|
|
|
|
bsr fw_PushMemoryState
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
ELSE ; FW_DYNAMIC_MEMORY_SUPPORT
|
|
|
|
|
|
|
|
IF FW_MUSIC_SUPPORT
|
2024-09-15 17:43:33 +02:00
|
|
|
IF (FW_MUSIC_PLAYER_CHOICE>=4)&&(FW_MUSIC_PLAYER_CHOICE<=6)
|
2023-05-22 16:17:35 +02:00
|
|
|
bsr fw_MusicAlloc
|
|
|
|
bsr fw_PushMemoryState
|
|
|
|
ENDC
|
|
|
|
ENDC
|
|
|
|
ENDC ; FW_DYNAMIC_MEMORY_SUPPORT
|
|
|
|
|
|
|
|
move.w vposr(a5),d0
|
|
|
|
btst #9,d0
|
|
|
|
beq.s .noaga
|
|
|
|
move.w #-1,fw_AgaChipset(a6)
|
|
|
|
.noaga
|
|
|
|
|
|
|
|
exg a4,a6 ; from now on, a4 is our framework pointer, a6 is exec
|
|
|
|
move.l a6,a5
|
|
|
|
PUTMSG 10,<"LoadView">
|
|
|
|
movea.l IVBLIT+IV_DATA(a5),a6 ; graphics.library
|
|
|
|
move.l a6,fw_GfxBase(a4)
|
|
|
|
move.l gb_ActiView(a6),fw_OldGfxView(a4)
|
|
|
|
|
|
|
|
IF FW_DO_FANCY_WORKBENCH_STUFF
|
|
|
|
CALL OwnBlitter
|
|
|
|
move.l a5,a6
|
|
|
|
|
|
|
|
;CALL Forbid
|
|
|
|
lea fw_SysFriendlyInterrupt(a4),a1
|
|
|
|
lea os_SysFriendlyVbl(pc),a0
|
|
|
|
move.l a0,IS_CODE(a1)
|
|
|
|
move.l a4,IS_DATA(a1)
|
|
|
|
moveq.l #INTB_VERTB,d0
|
|
|
|
CALL AddIntServer
|
|
|
|
|
|
|
|
PUSHM a4-a6
|
|
|
|
lea $dff000,a5
|
|
|
|
exg a4,a6
|
|
|
|
bsr preentrypoint
|
|
|
|
POPM
|
|
|
|
|
|
|
|
lea fw_SysFriendlyInterrupt(a4),a1
|
|
|
|
moveq.l #INTB_VERTB,d0
|
|
|
|
CALL RemIntServer
|
|
|
|
clr.l fw_VBlankIRQ(a4)
|
|
|
|
|
|
|
|
;CALL Permit
|
|
|
|
|
|
|
|
move.l fw_GfxBase(a4),a6
|
|
|
|
CALL DisownBlitter
|
|
|
|
suba.l a1,a1
|
|
|
|
CALL LoadView
|
|
|
|
CALL WaitTOF
|
|
|
|
ELSE
|
|
|
|
suba.l a1,a1
|
|
|
|
CALL LoadView
|
|
|
|
CALL WaitTOF
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
CALL OwnBlitter
|
|
|
|
move.l a5,a6
|
|
|
|
|
|
|
|
CALL Forbid
|
|
|
|
CALL Disable
|
|
|
|
|
|
|
|
PUTMSG 10,<"OS off">
|
|
|
|
|
|
|
|
bsr os_GetVbr
|
|
|
|
|
|
|
|
lea $dff000,a5
|
|
|
|
exg a4,a6 ; from now on, a6 is supposed to be our framework pointer, a5 is _custom
|
|
|
|
move.l a0,fw_VBR(a6)
|
2024-09-15 17:43:33 +02:00
|
|
|
IF FW_SOFT_IRQ_SUPPORT
|
|
|
|
move.l $64(a0),fw_OldSystemSoftIRQ(a6)
|
|
|
|
ENDC
|
2023-05-22 16:17:35 +02:00
|
|
|
move.l $6c(a0),fw_OldSystemVBlankIRQ(a6)
|
|
|
|
|
2024-09-15 17:43:33 +02:00
|
|
|
IF FW_AUDIO_IRQ_SUPPORT
|
|
|
|
move.l $70(a0),fw_OldSystemAudioIRQ(a6)
|
|
|
|
ENDC
|
|
|
|
|
2023-05-22 16:17:35 +02:00
|
|
|
move.w #$7fff,d4
|
|
|
|
move.w intenar(a5),d0
|
|
|
|
move.w d4,intena(a5)
|
|
|
|
move.w d4,intena(a5)
|
|
|
|
or.w #INTF_SETCLR,d0
|
|
|
|
move.w intreqr(a5),d1
|
|
|
|
move.w d4,intreq(a5)
|
|
|
|
move.w d4,intreq(a5)
|
|
|
|
or.w #INTF_SETCLR,d1
|
|
|
|
move.w dmaconr(a5),d2
|
|
|
|
move.w #DMAF_MASTER|DMAF_ALL,dmacon(a5)
|
|
|
|
or.w #DMAF_SETCLR,d2
|
|
|
|
move.w adkconr(a5),d3
|
|
|
|
move.w d4,adkcon(a5)
|
|
|
|
or.w #ADKF_SETCLR,d3
|
|
|
|
movem.w d0-d3,fw_OldControls(a6)
|
|
|
|
|
|
|
|
bsr fw_SetBaseCopper
|
|
|
|
movem.l fw_EmptyRegs(a6),d0-d7/a0-a4
|
|
|
|
rts
|
|
|
|
|
|
|
|
IF 0
|
|
|
|
.nopirq
|
|
|
|
move.w #$f00,$dff180
|
|
|
|
rts
|
|
|
|
|
|
|
|
.ciabname
|
|
|
|
dc.b 'ciab.resource',0
|
|
|
|
even
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
IF FW_DO_FANCY_WORKBENCH_STUFF
|
|
|
|
os_SysFriendlyVbl:
|
|
|
|
addq.w #1,fw_FrameCounter(a1)
|
|
|
|
move.l fw_VBlankIRQ(a1),d0
|
|
|
|
beq.s .skip
|
|
|
|
PUSHM a2-a4/d2-d7
|
|
|
|
move.l a1,a6
|
|
|
|
lea $dff000,a5
|
|
|
|
move.l d0,a0
|
|
|
|
jsr (a0)
|
|
|
|
POPM
|
|
|
|
move.l a5,a0
|
|
|
|
moveq.l #0,d0
|
|
|
|
.skip rts
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
os_GetVbr:
|
|
|
|
suba.l a0,a0
|
|
|
|
move.w AttnFlags(a6),d0
|
|
|
|
btst #AFB_68010,d0
|
|
|
|
beq.s .novbr
|
|
|
|
lea .getvbr(pc),a5
|
|
|
|
CALL Supervisor
|
|
|
|
.novbr rts
|
|
|
|
|
|
|
|
machine mc68010
|
|
|
|
.getvbr
|
|
|
|
movec.l vbr,a0
|
|
|
|
rte
|
|
|
|
machine mc68000
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
os_AppAbort:
|
|
|
|
addq.l #4,sp
|
|
|
|
move.l 4.w,a6
|
|
|
|
move.l fw_BasePtr(pc),a4
|
|
|
|
bra os_CleanUp
|
|
|
|
|
|
|
|
os_AppShutdown:
|
|
|
|
PUTMSG 10,<"AppShutdown">
|
|
|
|
IF FW_MUSIC_SUPPORT
|
|
|
|
bsr fw_StopMusic
|
|
|
|
ENDC
|
|
|
|
BLTWAIT
|
|
|
|
bsr fw_SetBaseCopper
|
|
|
|
|
|
|
|
move.w #$7fff,d0
|
|
|
|
move.w d0,intena(a5)
|
|
|
|
move.w d0,intena(a5)
|
|
|
|
move.w d0,intreq(a5)
|
|
|
|
move.w d0,intreq(a5)
|
|
|
|
move.w #DMAF_MASTER|DMAF_ALL,dmacon(a5)
|
|
|
|
move.w d0,adkcon(a5)
|
|
|
|
|
|
|
|
move.l fw_VBR(a6),a0
|
2024-09-15 17:43:33 +02:00
|
|
|
IF FW_SOFT_IRQ_SUPPORT
|
|
|
|
move.l fw_OldSystemSoftIRQ(a6),$64(a0)
|
|
|
|
ENDC
|
2023-05-22 16:17:35 +02:00
|
|
|
move.l fw_OldSystemVBlankIRQ(a6),$6c(a0)
|
2024-09-15 17:43:33 +02:00
|
|
|
IF FW_AUDIO_IRQ_SUPPORT
|
|
|
|
move.l fw_OldSystemAudioIRQ(a6),$70(a0)
|
|
|
|
ENDC
|
2023-05-22 16:17:35 +02:00
|
|
|
|
|
|
|
movea.l fw_GfxBase(a6),a0 ; graphics.library
|
|
|
|
move.l $26(a0),cop1lc(a5)
|
|
|
|
move.l $26(a0),cop2lc(a5)
|
|
|
|
move.w d0,copjmp1(a5)
|
|
|
|
movem.w fw_OldControls(a6),d0-d3
|
|
|
|
move.w d3,adkcon(a5)
|
|
|
|
move.w d2,dmacon(a5)
|
|
|
|
move.w d1,intreq(a5)
|
|
|
|
move.w d0,intena(a5)
|
|
|
|
|
|
|
|
move.l a6,a4
|
|
|
|
move.l 4.w,a6
|
|
|
|
CALL Enable
|
|
|
|
CALL Permit
|
|
|
|
|
|
|
|
move.l a6,a5
|
|
|
|
movea.l fw_GfxBase(a4),a6 ; graphics.library
|
|
|
|
CALL DisownBlitter
|
|
|
|
move.l fw_OldGfxView(a4),a1
|
|
|
|
CALL LoadView
|
|
|
|
|
|
|
|
IF 0
|
|
|
|
move.l fw_CiaBResource(a4),a6
|
|
|
|
move.l fw_SysFriendlyInterrupt(a4),a1
|
|
|
|
moveq.l #CIAICRB_TB,d0
|
|
|
|
CALL RemICRVector
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
move.l a5,a6
|
|
|
|
PUTMSG 10,<"OS on">
|
|
|
|
IF FW_DO_FANCY_WORKBENCH_STUFF
|
|
|
|
PUSHM a4-a6
|
|
|
|
exg a4,a6
|
|
|
|
bsr postentrypoint
|
|
|
|
POPM
|
|
|
|
ENDC
|
|
|
|
moveq.l #0,d7
|
|
|
|
|
|
|
|
os_CleanUp:
|
|
|
|
move.l fw_OrigFastMemAllocAddr(a4),d0
|
|
|
|
beq.s .nofreefast
|
|
|
|
move.l d0,a1
|
|
|
|
move.l fw_OrigFastMemAllocLength(a4),d0
|
|
|
|
CALL FreeMem
|
|
|
|
|
|
|
|
.nofreefast
|
|
|
|
move.l fw_OrigChipMemAllocAddr(a4),d0
|
|
|
|
beq.s .nofreechip
|
|
|
|
move.l d0,a1
|
|
|
|
move.l fw_OrigChipMemAllocLength(a4),d0
|
|
|
|
CALL FreeMem
|
|
|
|
|
|
|
|
.nofreechip
|
|
|
|
move.l fw_WBMessage(a4),d2
|
|
|
|
move.l fw_OrigBaseMemAllocAddr(a4),a1
|
|
|
|
move.l fw_OrigBaseMemAllocLength(a4),d0
|
|
|
|
CALL FreeMem
|
|
|
|
|
|
|
|
tst.l d2
|
|
|
|
beq.s .nowb
|
|
|
|
CALL Forbid
|
|
|
|
move.l d2,a1
|
|
|
|
CALL ReplyMsg
|
|
|
|
.nowb
|
|
|
|
|
|
|
|
PUTMSG 10,<"Done with code %d">,d7
|
|
|
|
move.w d7,d0
|
|
|
|
ext.l d0
|
|
|
|
rts
|