XREF SysRequest,Request,TypeAsk,TitelBitmap XDEF _DCScrBase,TopazName ;********************************************************* ;** _ _ ** ;** /| \ DELUXE CHANGER V1.0 / |\ ** ;** /_|_/ (C) 1990/91 BY ANDREAS RÖPKE \_|_\ ** ;** / | \ THIS IS PUBLIC DOMAIN SOFTWARE / | \ ** ;** ** ;** MADE WITH THE A68K ASSEMBLER & AMIGA 500 1.3 ** ;** WORK WITH KICKSTART 2.0 UNCERTAIN ** ;** ** ;********************************************************* INCLUDE exec/exec_lib.i INCLUDE intuition/intuition_lib.i INCLUDE libraries/dos_lib.i INCLUDE graphics/graphics_lib.i INCLUDE help.i SECTION "Startup",CODE Start move.l 4,a6 ;DOS-Basis finden lea $17a(a6),a0 ;und merken lea DOSName,a1 CALLSYS FindName move.l d0,_DOSBase move.l $114(a6),a4 ;Aufruf von diesem Task ? tst.l $ac(a4) bne.s FromCLI lea 92(a4),a0 CALLSYS WaitPort lea 92(a4),a0 CALLSYS GetMsg move.l d0,-(sp) jsr DeluxeStart CALLEXEC Forbid move.l (sp)+,a1 CALLSYS ReplyMsg bra EndAll FromCLI CALLSYS Forbid PEEKL Start-4,SegmentPtr clr.l Start-4 move.l #ProcessName,d1 moveq.l #9,d2 move.l #DeluxeStart-4,d3 asr.l #2,d3 move.l #3000,d4 CALLDOS CreateProc EndAll moveq.l #0,d0 rts SECTION "Main",CODE DeluxeStart bsr GetLibs SADD DCScreen,a0 CALLPC _IntuitionBase,OpenScreen beq NoScr POKEL d0,_DCScrBase PEEKL _DCScrBase,a0 lea $2c(a0),a0 SADD Colors,a1 moveq.l #4,d0 CALLPC _GfxBase,LoadRGB4 SADD DCWindow,a0 CALLPC _IntuitionBase,OpenWindow beq NoWind POKEL d0,_DCWindBase move.l d0,a1 POKEL $32(a1),_DCWindRast POKEL $56(a1),_DCWindUser bsr MakeTop DCWait PEEKL _DCWindUser,a0 CALLEXEC WaitPort PEEKL _DCWindUser,a0 CALLSYS GetMsg move.l d0,a1 move.l $14(a1),d4 move.l $1c(a1),a4 CALLSYS ReplyMsg cmpi.b #$40,d4 beq.s GadUp bra DCWait GadUp cmpi.w #"QU",$26(a4) beq.s DCQuit cmpi.w #"LD",$26(a4) bne.s NoLD bsr Load bra DCWait NoLD cmpi.w #"CV",$26(a4) bne.s NoCV bsr Convert bra DCWait NoCV cmpi.w #"SV",$26(a4) bne.s DCWait bsr Save bra DCWait DCQuit PEEKL _DCWindBase,a0 CALLPC _IntuitionBase,CloseWindow NoWind PEEKL _DCScrBase,a0 CALLPC _IntuitionBase,CloseScreen NoScr bsr ASCBufTest bsr FileBufTest tst.l SegmentPtr beq.s WasWork CALLEXEC Forbid PEEKL SegmentPtr,d1 CALLPC _DOSBase,UnLoadSeg WasWork moveq.l #0,d0 rts SegmentPtr ds.l 1 *** File laden Load bsr FileBufTest SADD LoadTitel,a0 jsr Request beq NoLoad move.l d0,d1 move.l #1005,d2 CALLPC _DOSBase,Open bne ScrOK SADD ErrNoFile,a0 jsr SysRequest bra NoLoad ScrOK move.l d0,d6 move.l d6,d1 moveq.l #0,d2 moveq.l #1,d3 CALLSYS Seek move.l d6,d1 moveq.l #0,d2 moveq.l #-1,d3 CALLSYS Seek POKEL d0,FileLenght moveq.l #1,d1 CALLEXEC AllocMem bne ScrBufferOK SADD ErrNoMem,a0 jsr SysRequest bra NoScrBuffer ScrBufferOK POKEL d0,FileBuffer move.l d6,d1 PEEKL FileBuffer,d2 PEEKL FileLenght,d3 CALLPC _DOSBase,Read SADD DoneIt,a0 jsr SysRequest NoScrBuffer move.l d6,d1 CALLPC _DOSBase,Close NoLoad rts *** File nach ASC konvertieren Convert bsr ASCBufTest tst.l FileBuffer bne.s OKConv SADD ErrEmpty,a0 jsr SysRequest bra NoConv OKConv jsr TypeAsk cmpi.w #"CL",d7 beq NoConv POKEL d0,ASCLenght move.l #1!$10000,d1 CALLEXEC AllocMem bne.s MemGot SADD ErrNoMem,a0 jsr SysRequest bra NoConv MemGot POKEL d0,ASCBuffer PEEKL FileLenght,d5 PEEKL FileBuffer,a2 PEEKL ASCBuffer,a3 divu #16,d5 tst.w d5 beq NoMore16 subq.w #1,d5 LineLoop PEEKL ASCBuffer,d0 add.l ASCLenght(pc),d0 sub.l #100,d0 cmpa.l d0,a3 bls Enough SADD ErrNoBuffer,a0 jsr SysRequest bra NoConv Enough bsr ConstructFront move.w #7,d4 ConLoop bsr ConstructPrefix move.w (a2)+,d2 bsr D2ToHex cmpi.w #0,d4 beq NoKomma move.b #44,(a3)+ NoKomma dbra d4,ConLoop dbra d5,LineLoop NoMore16 swap d5 tst.w d5 beq NoEnd addq.l #1,d5 lsr.w #1,d5 subq.l #1,d5 bsr ConstructFront EndLoop bsr ConstructPrefix move.w (a2)+,d2 bsr D2ToHex cmpi.w #0,d5 beq LastByte move.b #44,(a3)+ LastByte dbra d5,EndLoop NoEnd suba.l ASCBuffer(pc),a3 move.l a3,ASCLast SADD DoneIt,a0 jsr SysRequest NoConv rts ConstructPrefix cmpi.w #"AS",d7 bne NoAss2 move.b #"$",(a3)+ bra Ques2 NoAss2 cmpi.w #"CS",d7 bne Ques2 move.b #"0",(a3)+ move.b #"x",(a3)+ Ques2 rts ConstructFront cmpi.w #"BS",d7 bne NoBas1 SADD BasicFront,a0 CopyBas move.b (a0)+,(a3)+ cmpi.b #0,(a0) bne.s CopyBas bra Ques1 NoBas1 cmpi.w #"AS",d7 bne NoAss1 SADD AssFront,a0 AssCopy move.b (a0)+,(a3)+ cmpi.b #0,(a0) bne.s AssCopy bra Ques1 NoAss1 move.b #10,(a3)+ move.b #9,(a3)+ Ques1 rts *** wandelt d2 nach Hex-ASC D2ToHex moveq.w #3,d1 D2Next rol.w #4,d2 move.w d2,d3 and.b #$f,d3 add.b #48,d3 cmp.b #58,d3 bcs D2Out addq.b #7,d3 D2Out move.b d3,(a3)+ dbra d1,D2Next rts *** Save Save tst.l ASCBuffer bne.s OKSave SADD ErrEmpty,a0 jsr SysRequest bra NoSave OKSave SADD SaveTitel,a0 jsr Request beq NoSave move.l d0,d1 move.l #1006,d2 CALLPC _DOSBase,Open bne SaveFileOK SADD ErrNoFile,a0 jsr SysRequest bra NoSave SaveFileOK move.l d0,-(sp) move.l (sp),d1 PEEKL ASCBuffer,d2 PEEKL ASCLast,d3 CALLSYS Write move.l (sp)+,d1 CALLSYS Close SADD DoneIt,a0 jsr SysRequest NoSave rts *** Buffer-Test & Speicher freigeben FileBufTest tst.l FileBuffer beq FileBufEmpty PEEKL FileBuffer,a1 PEEKL FileLenght,d0 CALLEXEC FreeMem POKEL #0,FileBuffer FileBufEmpty rts ASCBufTest tst.l ASCBuffer beq ASCBufEmpty PEEKL ASCBuffer,a1 PEEKL ASCLenght,d0 CALLEXEC FreeMem POKEL #0,ASCBuffer ASCBufEmpty rts *** Titel Image/Border/Text ausgeben MakeTop PEEKL _DCWindRast,a0 SADD TitelImage,a1 moveq.l #0,d0 moveq.l #0,d1 CALLPC _IntuitionBase,DrawImage PEEKL _DCWindRast,a0 SADD Border0,a1 moveq.l #0,d0 moveq.l #0,d1 CALLSYS DrawBorder PEEKL _DCWindRast,a0 SADD TitelText,a1 moveq.l #0,d0 moveq.l #0,d1 CALLSYS PrintIText rts *** Library-Zeiger suchen und merken GetLibs move.l 4,a6 lea $17a(a6),a0 SADD IntName,a1 CALLSYS FindName POKEL d0,_IntuitionBase lea $17a(a6),a0 SADD GrafName,a1 CALLSYS FindName POKEL d0,_GfxBase rts IntName INTNAME DOSName DOSNAME GrafName GRAFNAME _IntuitionBase ds.l 1 _DOSBase ds.l 1 _GfxBase ds.l 1 *** Data-Teil DCScreen dc.w 0,0,640,200,2 dc.b 0,1 dc.w $8000,1 dc.l Topaz8,0,0,0 Colors dc.w $888,0,$fff,$555 DCWindow dc.w 0,0,640,200 dc.b -1,-1 dc.l 8!$40,$800!$1000!$10000,DCGad0,0,0 _DCScrBase dc.l 0,0 dc.w 0,0,0,0,15 _DCWindBase ds.l 1 _DCWindRast ds.l 1 _DCWindUser ds.l 1 DCGad0 dc.l DCGad1 dc.w 20,68,600,23,2,1,1 dc.l Border2,Border4,DCText0,0,0 dc.w "LD" dc.l 0 DCText0 dc.b 1,0,0,0 dc.w 300-16*4,8 dc.l 0,DCBytes0,0 TEXT DCBytes0,<"LOAD BINARY FILE"> DCGad1 dc.l DCGad2 dc.w 20,101,600,23,2,1,1 dc.l Border2,Border4,DCText1,0,0 dc.w "CV" dc.l 0 DCText1 dc.b 1,0,0,0 dc.w 300-19*4,8 dc.l 0,DCBytes1,0 TEXT DCBytes1,<"CONVERT BINARY FILE"> DCGad2 dc.l DCGad3 dc.w 20,134,600,23,2,1,1 dc.l Border2,Border4,DCText2,0,0 dc.w "SV" dc.l 0 DCText2 dc.b 1,0,0,0 dc.w 300-15*4,8 dc.l 0,DCBytes2,0 TEXT DCBytes2,<"SAVE ASCII FILE"> DCGad3 dc.l 0 dc.w 20,167,600,23,2,1,1 dc.l Border2,Border4,DCText3,0,0 dc.w "QU" dc.l 0 DCText3 dc.b 1,0,0,0 dc.w 300-4*4,8 dc.l 0,DCBytes3,0 TEXT DCBytes3,<"QUIT"> *** Titel-Strukturen TitelImage dc.w 320-17*8,13,17*16,25,1 dc.l TitelBitmap dc.b 1,0 dc.l 0 TitelText dc.b 1,0,0,0 dc.w 320-60*4,43 dc.l 0,TitelBytes,0 TEXT TitelBytes,<"(C) WRITTEN 1990/91 BY ANDREAS RÖPKE PUBLIC DOMAIN SOFTWARE"> LoadTitel dc.b 1,0,0,0 dc.w 160-14*4,0 dc.l 0,LoadBytes,0 TEXT LoadBytes,<"FILE TO LOAD ?"> SaveTitel dc.b 1,0,0,0 dc.w 160-14*4,0 dc.l 0,SaveBytes,0 TEXT SaveBytes,<"FILE TO SAVE ?"> DoneIt dc.b 1,0,0,0 dc.w 140-20*4,0 dc.l 0,DoneItBytes,0 TEXT DoneItBytes,<"I`VE DONE IT, MASTER"> *** Fehler ErrEmpty dc.b 1,0,0,0 dc.w 140-15*4,0 dc.l 0,ErrNoLoadBytes,0 TEXT ErrNoLoadBytes,<"BUFFER IS EMPTY"> ErrNoFile dc.b 1,0,0,0 dc.w 140-15*4,0 dc.l 0,ErrNoFileBytes,0 TEXT ErrNoFileBytes,<"CAN`T OPEN FILE"> ErrNoMem dc.b 1,0,0,0 dc.w 140-21*4,0 dc.l 0,ErrNoMemBytes,0 TEXT ErrNoMemBytes,<"CAN`T ALLOCATE MEMORY"> ErrNoBuffer dc.b 1,0,0,0 dc.w 140-21*4,0 dc.l 0,ErrNoBBytes,0 TEXT ErrNoBBytes,<"SORRY, BUFFER IS FULL"> *** Fonts Topaz8 dc.l TopazName dc.w 8 dc.b 0,1 TEXT TopazName,"topaz.font" *** Borders Border0 dc.w 20,10 dc.b 2,0,0,3 dc.l Pairs0,Border1 Pairs0 dc.w 599,0,0,0,0,43 Border1 dc.w 20,10 dc.b 1,0,0,3 dc.l Pairs1,0 Pairs1 dc.w 0,44,599,44,599,1 Border2 dc.w 0,0 dc.b 2,0,0,3 dc.l Pairs24,Border3 Border3 dc.w 0,0 dc.b 1,0,0,3 dc.l Pairs35,0 Border4 dc.w 0,0 dc.b 1,0,0,3 dc.l Pairs24,Border5 Border5 dc.w 0,0 dc.b 2,0,0,3 dc.l Pairs35,0 Pairs24 dc.w 599,0,0,0,0,21 Pairs35 dc.w 0,22,599,22,599,1 BasicFront dc.b 10,"DATA ",0 AssFront dc.b 10,9,9,"dc.w",9,0 even ASCBuffer ds.l 1 ASCLenght ds.l 1 ASCLast ds.l 1 FileBuffer ds.l 1 FileLenght ds.l 1 TEXT ProcessName,<"DeluxeChanger V1.0"> END