* GFX-RIP V1.0 CODED BY TECH ON 22-03-91 * THIS IS MY (FIRST) VERSION OF A GFX RIPPER. * AT THE MOMENT JUST HANDLES 5 BITPLANES, LOW & HI RES MODES. * SMALL BUG! -- EVERY THING YOU TYPE IN THE CODE, WILL BE ECHOED * ON THE CLI SCREEN WHEN YOU EXIT! ANNOYING WHEN YOU HAVE A SHELL * RUNNING AS THE CURSOR KEYS RECALL OLD COMMANDS, SO DON'T BLAME ME * IF IT RECALLS THE 'DELETE DF0: ALL' COMMAND! I'M NOT SURE WHY THIS * HAPPENS AS MULTITASKING IS OFF, BUT I'M SURE SOME KIND SOUL WILL * TELL ME WHY, AND MAYBE EVEN HOW TO PREVENT IT!!! SECTION GFX-RIP,CODE OPT C- NO CASE SENSITIVITY ********** * EXEC EQUATES (TO SPEED UP ASSEMBLEY!) OPENLIBRARY EQU -552 CLOSELIBRARY EQU -414 FORBID EQU -132 PERMIT EQU -138 ALLOCMEM EQU -198 FREEMEM EQU -210 MEMF_PUBLIC EQU 1<<0 MEMF_CHIP EQU 1<<1 MEMF_CLEAR EQU 1<<16 * DOS EQUATES OPEN EQU -30 CLOSE EQU -36 READ EQU -42 WRITE EQU -48 OUTPUT EQU -60 MODE_OLDFILE EQU 1005 MODE_NEWFILE EQU 1006 ********** INCDIR SYS:INCLUDE/ INCLUDE HARDWARE/CUSTOM.I ********** START MOVEM.L A0-A6/D0-D7,-(A7) SAVE ALL REGISTERS MOVE.L A7,STPOINT SAVE STACK POINTER MOVE.L #$DFF000,A5 I USE A5 AS MY HARDWARE OFFSET REG. MOVE.L $4,A6 JSR FORBID(A6) TURN OFF MULTITASKING LEA GFXNAME,A1 CLR.L D0 MOVE.L $4,A6 JSR OPENLIBRARY(A6) OPEN GFX LIBRARY MOVE.L D0,GFXBASE LEA DOSNAME,A1 OPEN DOS LIBRARY CLR.L D0 MOVE.L $4,A6 JSR OPENLIBRARY(A6) MOVE.L D0,DOSBASE MOVE.W DMACONR(A5),DMASAVE SAVE CLI DMA SETTINGS WAIT1 BTST #0,VPOSR(A5) WAIT FOR VBL BNE.S WAIT1 BEFORE TURNING WAIT2 CMPI.B #55,VHPOSR(A5) SPRITE DMA OFF TO BNE.S WAIT2 PREVENT CRAP APPEARING SET_UP MOVE.W #$7FFF,DMACON(A5) ALL DMA OFF MOVE.L #NEWCOP,COP1LC(A5) STICK MY NEW COPPER IN... MOVE.W COPJMP1(A5),D0 ...AND STROBE IT MOVE.W #%1000001111000000,DMACON(a5) BPL/COP/BLIT DMA ON. MOVE.W #$0000,COPPERCOND JUST TO BE 'SAFE!' ********** MOVE.L #INST,D0 SETUP HELP BANK. MOVE.W D0,INSTL SWAP D0 MOVE.W D0,INSTH ********** BRA SEL_BPL_1 BITPLANE 1 SELECTED ON STARTUP. ********** GETKEY BTST #6,$BFE001 BEQ QUIT QUIT ON LMB ********** MOVE.L MEMPOINT_1,D0 MOVE.W D0,PL1L 1ST COPPERLIST MOVE.W D0,P2L1L 2ND COPPERLIST SWAP D0 MOVE.W D0,PL1H 1ST COPPERLIST MOVE.W D0,P2L1H 2ND COPPERLIST MOVE.L MEMPOINT_2,D0 MOVE.W D0,PL2L 1ST COPPERLIST MOVE.W D0,P2L2L 2ND COPPERLIST SWAP D0 MOVE.W D0,PL2H 1ST COPPERLIST MOVE.W D0,P2L2H 2ND COPPERLIST MOVE.L MEMPOINT_3,D0 MOVE.W D0,PL3L 1ST COPPERLIST MOVE.W D0,P2L3L 2ND COPPERLIST SWAP D0 MOVE.W D0,PL3H 1ST COPPERLIST MOVE.W D0,P2L3H 2ND COPPERLIST MOVE.L MEMPOINT_4,D0 MOVE.W D0,PL4L 1ST COPPERLIST MOVE.W D0,P2L4L 2ND COPPERLIST SWAP D0 MOVE.W D0,PL4H 1ST COPPERLIST MOVE.W D0,P2L4H 2ND COPPERLIST MOVE.L MEMPOINT_5,D0 MOVE.W D0,PL5L 1ST COPPERLIST MOVE.W D0,P2L5L 2ND COPPERLIST SWAP D0 MOVE.W D0,PL5H 1ST COPPERLIST MOVE.W D0,P2L5H 2ND COPPERLIST ********** MOVE.B $BFEC01,D0 READ KEYBOARD NOT D0 ROR.B #1,D0 ********** CMPI.B #$5F,D0 HELP KEY? BEQ DOCS PRINT THE DOCS! CMPI.B #$45,D0 HELP KEY? BEQ RESET RESET ALL BPL POINTERS ********** CMPI.B #$4F,D0 LEFT ARROW? BEQ LEFT CMPI.B #$4E,D0 RIGHT ARROW? BEQ RIGHT CMPI.B #$4C,D0 UP ARROW? BEQ UP_FAST FAST UP CMPI.B #$4D,D0 DOWN ARROW? BEQ DN_FAST FAST DOWN ********** CMPI.B #$50,D0 F1? BEQ UP_SLO SLOW UP CMPI.B #$51,D0 F2? BEQ DN_SLO SLOW DOWN ********** CMPI.B #$44,D0 RETURN? BEQ SAVE SAVE SCREEN CMPI.B #$59,D0 HELP? BEQ SCR_OFF INFO BANK ON/OFF CMPI.B #$25,D0 "H"? BEQ HIRES HI-RES MODE ON CMPI.B #$28,D0 "L"? BEQ LORES LO-RES MODE ON ********** CMPI.B #$1D,D0 NUMB-PAD "1" BEQ SHO_BPL_1 1 BITPLANE ON CMPI.B #$1E,D0 NUMB-PAD "2" BEQ SHO_BPL_2 2 BITPLANES ON CMPI.B #$1F,D0 NUMB-PAD "3" BEQ SHO_BPL_3 3 BITPLANES ON CMPI.B #$2D,D0 NUMB-PAD "4" BEQ SHO_BPL_4 4 BITPLANES ON CMPI.B #$2E,D0 NUMB-PAD "5" BEQ SHO_BPL_5 5 BITPLANES ON ********** CMPI.B #$01,D0 KEYBOARD "1" BEQ SEL_BPL_1 ALTER BITPLANE #1 CMPI.B #$02,D0 KEYBOARD "2" BEQ SEL_BPL_2 ALTER BITPLANE #2 CMPI.B #$03,D0 KEYBOARD "3" BEQ SEL_BPL_3 ALTER BITPLANE #3 CMPI.B #$04,D0 KEYBOARD "4" BEQ SEL_BPL_4 ALTER BITPLANE #4 CMPI.B #$05,D0 KEYBOARD "5" BEQ SEL_BPL_5 ALTER BITPLANE #5 BRA GETKEY LOOP AROUND ********** LEFT ADDI.L #$1,(A3) (SCROLL LEFT) BSR DELAY LONGER DELAY THEN 1 VBL BRA GETKEY ********** RIGHT SUBI.L #$1,(A3) (SCROLL RIGHT) BSR DELAY LONGER DELAY THEN 1 VBL BRA GETKEY ********** UP_SLO CMPI.W #$0000,RESFLAG BEQ.S US_LO ADDI.L #40,(A3) ADD 40 FOR LO-RES, 80 FOR HI-RES US_LO ADDI.L #40,(A3) (UP 1 LINE) BSR SCRDELAY BRA GETKEY ********** DN_SLO CMPI.W #$0000,RESFLAG BEQ.S DS_LO SUBI.L #40,(A3) DS_LO SUBI.L #40,(A3) (DOWN 1 LINE) BSR SCRDELAY BRA GETKEY ********** UP_FAST CMPI.W #$0000,RESFLAG BEQ.S UF_LO ADDI.L #40*10,(A3) UF_LO ADDI.L #40*10,(A3) (UP 10 LINES) BSR VBL BRA GETKEY ********** DN_FAST CMPI.W #$0000,RESFLAG BEQ.S DF_LO SUBI.L #40*10,(A3) DF_LO SUBI.L #40*10,(A3) (DOWN 10 LINES) BSR VBL BRA GETKEY ********** SAVE MOVE.W BPLCON,D3 ANDI.W #$7000,D3 WANT BPL NO. ONLY ROR.L #8,D3 CAN ONLY USE 1-8 FOR IMMEDIATE ROT. ROR.L #4,D3 MOVE.W D3,NO_OF_BPL SAVE NUMBER OF BITPLANES IN PIC MOVE.W DMASAVE,D7 BSET #$F,D7 MOVE.W D7,DMACON(A5) MOVE.L GFXBASE,A0 MOVE.L $26(A0),COP1LC(A5) FIND/REPLACE SYSTEM COPPER MOVE.L $4,A6 JSR PERMIT(A6) ********** MOVE.L #CONNAME,D1 MOVE.L #MODE_OLDFILE,D2 MOVE.L DOSBASE,A6 JSR OPEN(A6) OPEN NEW WINDOW. MOVE.L D0,CONHD SAVE WINDOW HANDLE ********** MOVE.L #100,D0 RESERVE 100 BYTES MOVE.L #MEMF_PUBLIC,D1 ANY MEMORY WILL SUIT. MOVE.L $4,A6 JSR ALLOCMEM(A6) GIMMIE THE MEMORY! MOVE.L D0,BUFFER BUFFER FOR KEYBOARD ENTRY. ********** MOVE.L CONHD,D1 WINDOW HANDLE --> D1 MOVE.L BUFFER,D2 BUFFER SPACE --> D2 MOVE.L 100,D3 MAX READ VAL --> D3 MOVE.L DOSBASE,A6 JSR READ(A6) GET FILENAME MOVE.L CONHD,D1 WINDOW HANDLE -->D1 MOVE.L DOSBASE,A6 JSR CLOSE(A6) CLOSE WINDOW. MOVE.L D0,A0 CMPI.B #10,(A0) JUST RETURN = NO NAME SPECIFIED BEQ RSTRT ********** MOVE.L BUFFER,A0 MOVEQ.L #0,D0 CHK_CR MOVE.B (A0),D0 CMPI.B #10,D0 BEQ.S CR_FND ADDA #1,A0 BRA CHK_CR CR_FND MOVE.B #00,(A0) ********** MOVEQ.L #0,D3 CMPI.W #$0000,RESFLAG LO RES = $0000/HI RES = $FFFF BEQ.S LO_RES_SAVE HI_RES_SAVE MOVE.L #256*80,D3 1 HI-RES BITPLANE. BRA SAVE_2 LO_RES_SAVE MOVE.L #256*40,D3 1 LO-RES BITPLANE. ********** SAVE_2 MOVE.W NO_OF_BPL,D6 MULU D3,D6 TOTAL MEM REQ'D MOVE.L D6,D0 RESERVE 100 BYTES MOVE.L #MEMF_CHIP,D1 ANY MEMORY WILL SUIT. MOVE.L $4,A6 JSR ALLOCMEM(A6) GIMMIE THE MEMORY! MOVE.L D0,WRITE_BUF BUFFER FOR KEYBOARD ENTRY. BEQ RSTRT NO MEM = NO SAVE! ********** MOVE.L BUFFER,D1 SAVE SCREEN NAME MOVE.L #MODE_NEWFILE,D2 WRITE NEW FILE MOVE.L DOSBASE,A6 JSR OPEN(A6) OPEN OUR FILE MOVE.L D0,FILEHD SAVE FILEHANDLE BEQ RSTRT ERROR? --> GO BACK! MOVE.L FILEHD,D1 FILE HANDLE --> D1 MOVE.L WRITE_BUF,A1 MEMORY BUFFER ADDRESS --> A1 ********** SAVE_BPL_1 MOVE.L MEMPOINT_1,A0 MEMPOINT_1 = AREA TO SAVE MOVE.L D3,D7 SIZE OF 1 BITPLANE --> D7 SUBI.L #1,D7 CORRECT NUMBER FOR DBRA LOOP BL_1 MOVE.B (A0)+,(A1)+ 1 BYTE FROM SCREEN TO MEM DBRA D7,BL_1 ********** SAVE_BPL_2 CMPI.W #2,NO_OF_BPL DO WE HAVE 2 BITPLANES? BLT.S FINISHED_SAVING MOVE.L MEMPOINT_2,A0 MOVE.L D3,D7 SIZE OF 1 BITPLANE --> D7 SUBI.L #1,D7 CORRECT NUMBER FOR DBRA LOOP BL_2 MOVE.B (A0)+,(A1)+ 1 BYTE FROM SCREEN TO MEM DBRA D7,BL_2 ********** SAVE_BPL_3 CMPI.W #3,NO_OF_BPL DO WE HAVE 2 BITPLANES? BLT.S FINISHED_SAVING MOVE.L MEMPOINT_3,D2 MOVE.L D3,D7 SIZE OF 1 BITPLANE --> D7 SUBI.L #1,D7 CORRECT NUMBER FOR DBRA LOOP BL_3 MOVE.B (A0)+,(A1)+ 1 BYTE FROM SCREEN TO MEM DBRA D7,BL_3 ********** SAVE_BPL_4 CMPI.W #4,NO_OF_BPL DO WE HAVE 2 BITPLANES? BLT.S FINISHED_SAVING MOVE.L MEMPOINT_4,D2 MOVE.L D3,D7 SIZE OF 1 BITPLANE --> D7 SUBI.L #1,D7 CORRECT NUMBER FOR DBRA LOOP BL_4 MOVE.B (A0)+,(A1)+ 1 BYTE FROM SCREEN TO MEM DBRA D7,BL_4 ********** SAVE_BPL_5 CMPI.W #5,NO_OF_BPL DO WE HAVE 2 BITPLANES? BLT.S FINISHED_SAVING MOVE.L MEMPOINT_5,D2 MOVE.L D3,D7 SIZE OF 1 BITPLANE --> D7 SUBI.L #1,D7 CORRECT NUMBER FOR DBRA LOOP BL_5 MOVE.B (A0)+,(A1)+ 1 BYTE FROM SCREEN TO MEM DBRA D7,BL_5 ********** FINISHED_SAVING MOVE.L FILEHD,D1 FILE HANDLE MOVE.L WRITE_BUF,D2 SOURCE ADDRESS MOVE.L D6,D3 D6 STILL HOLDS TOTAL FILE SIZE MOVE.L DOSBASE,A6 JSR WRITE(A6) SAVE FILE TST.L D0 ANY PROBLEMS? BMI SET_NO_SAVE NEGATIVE NUMBER = NO SAVE! BRA FREEALL ********** SET_NO_SAVE MOVE.L #$0F0F0F0F,D7 FREE MEM BEFORE NO_SAVE MSG ********** FREEALL MOVE.L D6,D0 FREE ALLOCATED MEMORY MOVE.L WRITE_BUF,A1 ADDRESS OF BUFFER MOVE.L $4,A6 JSR FREEMEM(A6) ********** MOVE.L #100,D0 FREE 100 BYTES MOVE.L BUFFER,A1 ADDRESS OF BUFFER MOVE.L $4,A6 JSR FREEMEM(A6) MOVE.L FILEHD,D1 MOVE.L DOSBASE,A6 JSR CLOSE(A6) CLOSE FILE CMPI.L #$0F0F0F0F,D7 SAVING PROBLEMS? BNE SAVED ********** NO_SAVE MOVE.L DOSBASE,A6 JSR OUTPUT(A6) MOVE.L D0,CLIHD MOVE.L CLIHD,D1 MOVE.L #NOSAVEMSG,D2 MOVE.L #NOSAVEMSGLEN,D3 MOVE.L DOSBASE,A6 JSR WRITE(A6) BRA LMB TEST MOUSE + RESTART CODE ********** SCR_OFF CMPI.W #$FFFF,COPPERCOND TURN INFO BANK ON/OFF BEQ.S DO_CL1 DO_CL2 MOVE.L #NEWCOP2,COP1LC(A5) MOVE.W #$FFFF,COPPERCOND BSR LONGDELAY BRA GETKEY DO_CL1 MOVE.L #NEWCOP,COP1LC(A5) MOVE.W #$0000,COPPERCOND BSR LONGDELAY BRA GETKEY ********** HIRES MOVE.W BPLCON,D0 BSET #15,D0 HI RES ON MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' MOVE.W #$003C,DFSTRT COPPER LIST 'A' MOVE.W #$003C,DFSTRTB COPPER LIST 'B' MOVE.W #$00D4,DFSTOP COPPER LIST 'A' MOVE.W #$00D4,DFSTOPB COPPER LIST 'B' MOVE.W #$FFFF,RESFLAG SET MY HI-RES MODE FLAG BRA GETKEY ********** LORES MOVE.W BPLCON,D0 BCLR #15,D0 MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' MOVE.W #$0038,DFSTRT COPPER LIST 'A' MOVE.W #$0038,DFSTRTB COPPER LIST 'B' MOVE.W #$00D0,DFSTOP COPPER LIST 'A' MOVE.W #$00D0,DFSTOPB COPPER LIST 'B' MOVE.W #$0000,RESFLAG CLEAR MY HI-RES MODE FLAG BRA GETKEY ********** RESET MOVE.L #0,MEMPOINT_1 RESET ALL POINTERS TO 0 MOVE.L #0,MEMPOINT_2 MOVE.L #0,MEMPOINT_3 MOVE.L #0,MEMPOINT_4 MOVE.L #0,MEMPOINT_5 MOVE.W BPLCON,D0 BSET #12,D0 1 BITPLANE ON BCLR #13,D0 BCLR #14,D0 MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' MOVE.L #MEMPOINT_1,A3 1ST BITPLANE SELECTED CMPI.W #$FFFF,RESFLAG ARE WE IN HI-RES MODE? BNE GETKEY BRA LORES LO-RES MODE ON ********** SHO_BPL_1 MOVE.W BPLCON,D0 BSET #12,D0 1 BITPLANE ON BCLR #13,D0 BCLR #14,D0 MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' BRA GETKEY ********** SEL_BPL_1 MOVE.L #MEMPOINT_1,A3 BRA GETKEY ********** SHO_BPL_2 MOVE.W BPLCON,D0 BCLR #12,D0 2 BITPLANES ON BSET #13,D0 BCLR #14,D0 MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' BRA GETKEY ********** SEL_BPL_2 MOVE.L #MEMPOINT_2,A3 BRA GETKEY ********** SHO_BPL_3 MOVE.W BPLCON,D0 BSET #12,D0 3 BITPLANES ON BSET #13,D0 BCLR #14,D0 MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' BRA GETKEY ********** SEL_BPL_3 MOVE.L #MEMPOINT_3,A3 BRA GETKEY ********** SHO_BPL_4 MOVE.W BPLCON,D0 BCLR #12,D0 4 BITPLANES ON BCLR #13,D0 BSET #14,D0 MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' BRA GETKEY ********** SEL_BPL_4 MOVE.L #MEMPOINT_4,A3 BRA GETKEY ********** SHO_BPL_5 MOVE.W BPLCON,D0 BSET #12,D0 5 BITPLANES ON BCLR #13,D0 BSET #14,D0 MOVE.W D0,BPLCON COPPER LIST 'A' MOVE.W D0,BPLCONB COPPER LIST 'B' BRA GETKEY ********** SEL_BPL_5 MOVE.L #MEMPOINT_5,A3 BRA GETKEY ********** QUIT MOVE.W DMASAVE,D7 BSET #$F,D7 MOVE.W D7,DMACON(A5) MOVE.L GFXBASE,A0 MOVE.L $26(A0),COP1LC(A5) FIND/REPLACE SYSTEM COPPER MOVE.L DOSBASE,A6 JSR OUTPUT(A6) MOVE.L D0,CLIHD MOVE.L CLIHD,D1 DISPLAY MY UTTERLY USELESS MOVE.L #QUITTEXT,D2 END MESSAGE!!! MOVE.L #QUITTEXTLEN,D3 MOVE.L DOSBASE,A6 JSR WRITE(A6) MOVEQ.L #0,D0 MOVE.L GFXBASE,A1 MOVE.L $4,A6 JSR CLOSELIBRARY(A6) CLOSE GRAPHICS LIBRARY MOVE.L DOSBASE,A1 MOVE.L $4,A6 JSR CLOSELIBRARY(A6) MOVE.L $4,A6 JSR PERMIT(A6) TURN ON MULTITASKING MOVE.L STPOINT,A7 RESTORE STACK... MOVEM.L (A7)+,A0-A6/D0-D7 ...AND REGISTERS RTS GOODBYE CRUEL WORLD (SOB!) ********** SAVED MOVE.L DOSBASE,A6 JSR OUTPUT(A6) MOVE.L D0,CLIHD MOVE.L CLIHD,D1 MOVE.L #SAVEMSG,D2 MOVE.L #SAVEMSGLEN,D3 MOVE.L DOSBASE,A6 JSR WRITE(A6) LMB BTST #6,$BFE001 BNE.S LMB HOLD LMB..... RELEASE BTST #6,$BFE001 BEQ.S RELEASE .....AND RELEASE. BSR.S LONGDELAY SHORT WAIT FOR CERTAIN REASONS!! RSTRT MOVE.L $4,A6 JSR FORBID(A6) BRA WAIT1 REKILL OS, ETC. ********** VBL CMPI.B #255,$DFF006 WAIT FOR 1 FRAME BNE.S VBL RTS ********** DELAY MOVE.L #10,D5 DLOOP BSR.S VBL DBRA D5,DLOOP RTS ********** SCRDELAY MOVE.L #5,D5 SDLOOP BSR.S VBL DBRA D5,SDLOOP RTS ********** LONGDELAY MOVE.L #100,D5 LDLOOP BSR.S VBL DBRA D5,DLOOP RTS ****************************************************************** * * THIS IS MY SCREENTYPER ROUTINE, I USE IT TO TYPE THE DOCS. * ****************************************************************** DOCS MOVE.W #0,DOCSDELAY CLEAR THEM ALL IN CASE MOVE.W #0,HCOUNT SOMEBODY RETURNS TO THE MOVE.L #0,STRTPOS DOCS AFTER READING THEM MOVE.L #0,LINESTRT ONCE BEFORE ********** MOVE.L #640*256,D0 ALLOCATE 1 BITPLANE MOVE.L #MEMF_CHIP+MEMF_CLEAR,D1 MOVE.L $4,A6 JSR ALLOCMEM(A6) MOVE.L D0,SCREEN BEQ QUIT QUIT IF NO MEMORY! ********** MOVE.L #512,D0 MEMORY FOR COLOUR BUFFER MOVE.L #MEMF_CHIP+MEMF_CLEAR,D1 MOVE.L $4,A6 JSR ALLOCMEM(A6) MOVE.L D0,COL_BUF BEQ QUIT ********** MOVE.L #DOCCOP,COP1LC(A5) DOCS COPPERLIST MOVE.L SCREEN,D0 SET UP SCREEN MOVE.W D0,P3L1L LOAD SCREEN ADDRESS SWAP D0 INTO DOCS COPPERLIST! MOVE.W D0,P3L1H BSR BUILD_COLTAB SETUP BACKGROUND COPPER MOVEQ.L #0,D0 MOVE.L #TEXT,A0 TEXT ADDRESS --> D0 MOVE.L SCREEN,A2 SCREEN ADDRESS --> A2 ADDA #80*10,A2 POINT TO LOWER DOWN SCREEN MOVE.L A2,STRTPOS SAVE CURRENT SCREEN POINTER MOVE.L A2,LINESTRT SAVE LINE START POINTER ********** MOVE.L $6C,OLDINT+2 INTERRUPT FOR COLOUR CYCLE MOVE.L #NEWINT,$6C DOCLOOP MOVE.L #FONT,A1 ADDRESS OF FONT DATA --> A1 MOVE.B (A0)+,D0 READ CHAR CMPI.B #120,D0 IS IT AN "x"? BEQ END YES: END! CMPI.B #'t',D0 TURBO MODE! (NO VBL WAIT) BNE.S TST_NRM MOVE.W #$FFFF,TURBO TURBO MODE ON MOVE.B #00,D0 TST_NRM CMPI.B #'n',D0 NORMAL MODE (TURBO OFF) BNE.S TST_SPD MOVE.W #$0000,TURBO MOVE.B #00,D0 TST_SPD CMPI.B #102,D0 BNE.S TST_SP2 MOVE.W #0,DOCSDELAY FAST TYPING BRA SKIP TST_SP2 CMPI.B #115,D0 BNE.S SPD_DNE MOVE.W #20,DOCSDELAY SLOW TYPING BRA SKIP SPD_DNE CMPI.W #80,HCOUNT ADJUST FIRST NUMBER FOR SCREEN WIDTH BNE.S NOT_EOL MOVE.W #0,HCOUNT WE'VE REACHED THE END OF THE LINE MOVE.L LINESTRT,A2 ADDA.L #80*8,A2 MOVE.L A2,STRTPOS MOVE.L A2,LINESTRT NOT_EOL CMPI.B #59,D0 BGT.S ALPHA_CHAR IT'S AN A-Z CHARACTER CMPI.B #31,D0 BGT.S PUNC_CHAR IT'S AN EXTRA CHARACTER BRA SKIP SKIP IF CHAR IS NOT RECOGNISED ALPHA_CHAR SUBI.L #65,D0 ASCII --> POINTER ADD.L D0,A1 ADD POINTER TO FONT POINTER BRA STRTPLT PRINT CHARACTER PUNC_CHAR SUBI #32,D0 GET PROPER OFFSET ADDI.L #26,D0 SKIP ALPHA CHARS ADD.L D0,A1 AND ADD OFFSET STRTPLT MOVE.L #7,D1 8 DBRA LOOPS PLOTLP MOVE.B (A1),(A2) MOVE 8 BITS FROM FONT TO SCREEN ADDA.L #52,A1 NEXT FONT LINE ADDA.L #80,A2 NEXT SCREEN LINE DBRA D1,PLOTLP DO REST OF CHARACTER ********** SKIP ADDI.L #1,STRTPOS NEXT HORIZONTAL POSITION MOVE.L STRTPOS,A2 RELOAD (NEW) SCREEN POINTER CMPI.W #$FFFF,TURBO TURBO MODE ON? BEQ.S NOVBL ********** MOVE.W DOCSDELAY,D7 ADJUST FIRST NUMBER FOR DELAY WTVBL CMPI.B #255,$DFF006 BNE.S WTVBL BTST #6,$BFE001 WANT TO QUIT EARLY? BEQ END2 RELEASE BUTTON BEFORE RETURNING DBRA D7,WTVBL ********** NOVBL ADDI.W #1,HCOUNT ********** BRA DOCLOOP KEEP ON GOING! ********** END BTST #6,$BFE001 PRESS LMB..... BNE.S END END2 BTST #6,$BFE001 .....AND RELEASE! BEQ.S END2 MOVE.L #NEWCOP,COP1LC(A5) RESTORE GFX-RIPPER COPPER BSR LONGDELAY TO STOP THE WHOLE PROGRAM QUITTING!! MOVE.L SCREEN,A1 MOVE.L #640*256,D0 SIZE OF MEMORY TO FREE MOVE.L $4,A6 JSR FREEMEM(A6) FREE OUT SCREEN MEMORY MOVE.L COL_BUF,A1 MOVE.L #512,D0 MOVE.L $4,A6 JSR FREEMEM(A6) FREE COLOUR SPACE ********** MOVE.L OLDINT+2,$6C RESTORE INTERRUPT ********** BRA GETKEY RETURN TO GFX-RIPPER ********** NEWINT MOVEM.L A0-A6/D0-D7,-(A7) JSR COL_ROLL CYCLE THE COLOURS MOVEM.L (A7)+,A0-A6/D0-D7 OLDINT JMP $0 ********** COL_NUMB EQU 51 NUMBER OF COLOURTABLE ENTRIES ********** COL_TAB DC.W $0F49,$0F3A,$0F2F,$0F3E DC.W $0F4D,$0F5C,$0F6B,$0F7A DC.W $0F89,$0F98,$0FA7,$0FB5 DC.W $0FC4,$0FD3,$0FE2,$0FF3 DC.W $0FE4,$0FD5,$0FC6,$0FB7 DC.W $0FA8,$0F99,$0F8A,$0F7B DC.W $0F6A,$0F59,$0F48,$0F37 DC.W $0F26,$0F35,$0F44,$0F53 DC.W $0F62,$0F73,$0F84,$0FA5 DC.W $0FB6,$0FC7,$0FD8,$0FE9 DC.W $0FFA,$0FEB,$0FDC,$0FCD DC.W $0FBE,$0FAF,$0F9E,$0F8D DC.W $0F7C,$0F6B,$0F5A ********** BUILD_COLTAB MOVEQ.L #0,D0 MOVEQ.L #0,D1 LEA COL_PTR,A0 LEA COL_TAB,A1 MOVE.W #COL_NUMB,D1 NUMBER OF COLOURS IN TABLE MOVE.L #254,D7 250 DBRA LOOPS COL_LOOP MOVE.B D0,0(A0) LOAD WAIT VALUE MOVE.W (A1),6(A0) LOAD COLOUR VALUE ADDI.W #1,COL_DONE CMP.W COL_DONE,D1 REACHED END OF COLOUR TABLE? BEQ.S COL_FIN ADDA.L #2,A1 NEXT COLOUR VALUE COL_RTS ADDA.L #8,A0 NEXT COPPER ENTRY ADDI.B #1,D0 NEXT COPPER LINE DBRA D7,COL_LOOP BRA BUILD_PAL ********** COL_FIN LEA COL_TAB,A1 MOVE.W #0,COL_DONE BRA COL_RTS ********** BUILD_PAL MOVEQ.L #0,D0 LEA PAL_PTR,A0 MOVE.L #50,D7 250 DBRA LOOPS COL_LOOP2 MOVE.B D0,0(A0) LOAD WAIT VALUE MOVE.W (A1),6(A0) LOAD COLOUR VALUE ADDI.W #1,COL_DONE CMP.W COL_DONE,D1 REACHED END OF COLOUR TABLE? BEQ.S COL_FIN2 ADDA.L #2,A1 NEXT COLOUR VALUE COL_RTS2 ADDA.L #8,A0 NEXT COPPER ENTRY ADDI.B #1,D0 NEXT COPPER LINE DBRA D7,COL_LOOP2 RTS ********** COL_FIN2 LEA COL_TAB,A1 MOVE.W #0,COL_DONE BRA COL_RTS2 ********** COL_ROLL MOVE.L #254,D7 LEA COL_PTR,A0 MOVE.L COL_BUF,A1 COL_LOP MOVE.W 6(A0),(A1)+ ADDA.L #8,A0 DBRA D7,COL_LOP LEA COL_PTR,A0 MOVE.L COL_BUF,A1 ADDA.L #8,A0 MOVE.L #253,D7 C_LOP2 MOVE.W (A1)+,6(A0) ADDA.L #8,A0 DBRA D7,C_LOP2 LEA COL_PTR,A0 MOVE.W (A1),6(A0) ********** MOVE.L #50,D7 LEA PAL_PTR,A0 MOVE.L COL_BUF,A1 PAL_LOP MOVE.W 6(A0),(A1)+ ADDA.L #8,A0 DBRA D7,PAL_LOP LEA PAL_PTR,A0 MOVE.L COL_BUF,A1 ADDA.L #8,A0 MOVE.L #49,D7 P_LOP2 MOVE.W (A1)+,6(A0) ADDA.L #8,A0 DBRA D7,P_LOP2 LEA PAL_PTR,A0 MOVE.W (A1),6(A0) RTS ********** SECTION COPPER,CODE_C NEWCOP DC.W BPLCON0 BPLCON DC.W $1200 DC.W BPLCON1,$0000 DC.W DIWSTRT,$2281 DC.W DIWSTOP,$22C1 DC.W DDFSTRT DFSTRT DC.W $0038 DC.W DDFSTOP DFSTOP DC.W $00D0 DC.W BPL1MOD,$0000 DC.W BPL2MOD,$0000 DC.W COLOR+$00,$0000 DC.W COLOR+$02,$0FFF PALETTE DC.W $0180,$0000,$0182,$0FFF,$0184,$0E00,$0186,$0A00 DC.W $0188,$0D80,$018A,$0FE0,$018C,$08F0,$018E,$0080 DC.W $0190,$00B6,$0192,$00DD,$0194,$00AF,$0196,$007C DC.W $0198,$000F,$019A,$070F,$019C,$0C0E,$019E,$0C08 DC.W $01A0,$0620,$01A2,$0E52,$01A4,$0A52,$01A6,$0FCA DC.W $01A8,$0333,$01AA,$0444,$01AC,$0555,$01AE,$0666 DC.W $01B0,$0777,$01B2,$0888,$01B4,$0999,$01B6,$0AAA DC.W $01B8,$0CCC,$01BA,$0DDD,$01BC,$0EEE,$01BE,$0FFF DC.W BPLPT+00 SET UP COPPER BPLANE POINTERS PL1H DC.W 0,BPLPT+02 PL1L DC.W 0,BPLPT+04 PL2H DC.W 0,BPLPT+06 PL2L DC.W 0,BPLPT+08 PL3H DC.W 0,BPLPT+10 PL3L DC.W 0,BPLPT+12 PL4H DC.W 0,BPLPT+14 PL4L DC.W 0,BPLPT+16 PL5H DC.W 0,BPLPT+18 PL5L DC.W 0 DC.W $E209,$FFFE,BPLCON0,$0200 THIS JUST GIVES A THIN LINE DC.W $E309,$FFFE,BPLCON0,$9200 BETWEEN THE TWO SCREENS. DC.W DDFSTRT,$003C HI-RES DDF VALUES DC.W DDFSTOP,$00D4 DC.W BPLPT+$00 SET UP HELP BANK INSTH DC.W 0,BPLPT+$02 INSTL DC.W 0 DC.W COLOR+$02,$00F0 DC.W $E309,$FFFE,COLOR+$02,$0000 DC.W $E409,$FFFE,COLOR+$02,$0444 DC.W $E509,$FFFE,COLOR+$02,$0555 DC.W $E609,$FFFE,COLOR+$02,$0666 DC.W $E709,$FFFE,COLOR+$02,$0888 DC.W $E809,$FFFE,COLOR+$02,$0AAA DC.W $E909,$FFFE,COLOR+$02,$0CCC DC.W $EA09,$FFFE,COLOR+$02,$0EEE DC.W $EB09,$FFFE,COLOR+$02,$0CCC DC.W $EC09,$FFFE,COLOR+$02,$0AAA DC.W $ED09,$FFFE,COLOR+$02,$0888 DC.W $EE09,$FFFE,COLOR+$02,$0666 DC.W $EF09,$FFFE,COLOR+$02,$0555 DC.W $F009,$FFFE,COLOR+$20,$0444 DC.W $F109,$FFFE,COLOR+$02,$0000 DC.W $F209,$FFFE,COLOR+$02,$0FFF DC.W $FFFF,$FFFE AND WAIT FOR THE IMPOSSIBLE! ********** SECOND COPPER (NO HELP MENU!) NEWCOP2 DC.W BPLCON0 BPLCONB DC.W $1200 DC.W BPLCON1,$0000 DC.W DIWSTRT,$2281 DC.W DIWSTOP,$22C1 DC.W DDFSTRT DFSTRTB DC.W $0038 DC.W DDFSTOP DFSTOPB DC.W $00D0 DC.W BPL1MOD,$0000 DC.W BPL2MOD,$0000 DC.W COLOR+$00,$0000 DC.W COLOR+$02,$0FFF DC.W BPLPT+00 SET UP COPPER BPLANE POINTERS P2L1H DC.W 0,BPLPT+02 P2L1L DC.W 0,BPLPT+04 P2L2H DC.W 0,BPLPT+06 P2L2L DC.W 0,BPLPT+08 P2L3H DC.W 0,BPLPT+10 P2L3L DC.W 0,BPLPT+12 P2L4H DC.W 0,BPLPT+14 P2L4L DC.W 0,BPLPT+16 P2L5H DC.W 0,BPLPT+18 P2L5L DC.W 0 DC.W $FFFF,$FFFE ********** DOCCOP DC.W BPLCON0,$9200 DC.W BPLCON1,$0000 DC.W DIWSTRT,$2281 DC.W DIWSTOP,$22C1 DC.W DDFSTRT,$003C DC.W DDFSTOP,$00D4 DC.W BPL1MOD,$0000 DC.W BPL2MOD,$0000 DC.W COLOR+$00,$0000 DC.W COLOR+$02,$0CCC DC.W BPLPT+$00 SET UP COPPER BPLANE POINTERS P3L1H DC.W 0,BPLPT+$02 P3L1L DC.W 0 ********** COL_PTR REPT 255 DC.W $0009,$FFFE,$0182,$0000 ENDR DC.W $FFE1,$FFFE PAL ENABLE PAL_PTR REPT 51 DC.W $0009,$FFFE,$0182,$0000 ENDR DC.W $FFFF,$FFFE ********** LABELS APLENTY! SECTION DATA,DATA GFXNAME DC.B 'graphics.library' EVEN GFXBASE DC.L 0 DOSNAME DC.B 'dos.library',0 EVEN DOSBASE DC.L 0 STPOINT DC.L 0 DMASAVE DC.W 0 FILEHD DC.L 0 BUFFER DC.L 0 WRITE_BUF DC.L 0 CLIHD DC.L 0 CONHD DC.L 0 COPPERCOND DC.L 0 RESFLAG DC.W 0 MEMPOINT_1 DC.L 0 MEMPOINT_2 DC.L 0 MEMPOINT_3 DC.L 0 MEMPOINT_4 DC.L 0 MEMPOINT_5 DC.L 0 NO_OF_BPL DC.W 0 DOCSDELAY DC.W 0 HCOUNT DC.W 0 STRTPOS DC.L 0 LINESTRT DC.L 0 SCREEN DC.L 0 TURBO DC.W 0 COL_DONE DC.W 0 COL_BUF DC.L 0 ********** CONNAME DC.B 'CON:0/100/640/30/Please Enter The Filename:',0 ********** QUITTEXT DC.B $9B,'3;33;40m' DC.B 'Thankyou for using GFXRIP V1.0!',10,'Please call again soon!' DC.B $9B,'0;31;40m',10,10 QUITTEXTLEN EQU *-QUITTEXT ********** SAVEMSG DC.B 10,$9B,'0;33;40m','Your screen has been saved in RAW format, at your selected resolution',10 DC.B 'This means you will have have to load the file into an IFF converter to save',10 DC.B 'it out as an IFF picture.',$9B,'3;33;40m',10 DC.B ' TECH in 1991.' DC.B 10,10,' Left One . . .',$9B,'0;31;40m',10,10 SAVEMSGLEN EQU *-SAVEMSG ********** NOSAVEMSG DC.B 10,$9B,'0;33;40m','Oh Dear! I had some problems saving your file!',10 DC.B 'I hope you know what went wrong because I sure as hell dont!!!',10 DC.B $9B,'3;33;40m',10 DC.B ' Sorry!!! TECH in 1991.' DC.B 10,10,' Left One . . .',$9B,'0;31;40m',10,10 NOSAVEMSGLEN EQU *-NOSAVEMSG ********** * THIS VERSION SUPPORTS 80 HORIZONTAL CHARS & 30 VERTICAL LINES. * REMEMBER: SMALL FUNCTION CHARS WILL APPEAR AS SPACES ON SCREEN. * COMMANDS: 'f' --> FAST TYPING * 's' --> SLOW TYPING * 't' --> TURBO (V.FAST) MODE ON * 'n' --> NORMAL (TURBO OFF) * 'x' --> END TEXT * ENTER ALL TEXT IN CAPITALS! ********** * 00000000011111111112222222222333333333344444444445555555555666666666677777777778 * TEXT WIDTH: '12345678901234567890123456789012345678901234567890123456789012345678901234567890' TEXT DC.B 't n********** ***** ***** * *t ' DC.B ' n* * * * *t ' DC.B ' n* *** * *****t ' DC.B ' n* * * * *t ' DC.B ' n* ***** ***** * *t ' DC.B ' ' DC.B ' nIS PROUD TO PRESENTt ' DC.B ' ' DC.B ' n*******************t ' DC.B ' n* GFX-RIPPER V1.0 *t ' DC.B ' n*******************t ' DC.B ' ' DC.B ' nCODED BY TECH, ONE RAINY DAY IN MARCH!t ' DC.B ' ' DC.B 'n HI THERE! AND WELCOME TO THE TECH GFX-RIPPER, V1.0! I CODED THIS AFTER ' DC.B 'SEEING RAISTLINS GFX RIPPER ON ACC 10. IT WAS A NICE IDEA, SO I CODED THIS! IT ' DC.B 'SUPPORTS 5 BITPLANES, AND WORKS IN EITHER HI RES (640 PIXEL WIDTH) OR LOW RES ' DC.B '(320 PIXEL WIDTH). USE 1-5 ON THE NUMBER PAD TO ALTER THE NUMBER OF BITPLANES ON' DC.B 'THE SCREEN, BUT REMEMBER, YOU CANNOT HAVE MORE THAN 4 ON A HI RES SCREEN. USE ' DC.B 'CURSOR KEYS TO SCROLL THE CURRENT BITPLANE (SELECTED BY 1-5 ON MAIN KEYBOARD) ' DC.B 'AND USE F1 + F2 TO SCROLL UP + DOWN SLOWLY (FOR DETAILED POSITIONING). PRESS "L"' DC.B 'AND "H" TO SELECT LOW AND HI RES MODES RESPECTIVELY. PRESS ESCAPE AT ANY TIME TO' DC.B 'RESET BACK TO A SINGLE BITPLANE. PRESSING RETURN WILL SAVE OUT THE SCREEN, ' DC.B 'ACCORDING TO YOUR SETUP, FOR EXAMPLE IF YOU ARE RUNNING IN HI RES WITH 3 PLANES ' DC.B 'ACTIVE, THEN YOU WILL GET A 640 PIXEL * 256 PIXEL, SIZED PIC, WITH THE RELEVANT ' DC.B 'NUMBER OF BITPLANES. IT IS IMPORTANT TO REMEMBER THAT YOUR PIC WILL BE SAVED IN ' DC.B 'RAW FORMAT, SO YOU WILL HAVE TO LOAD IT INTO AN IFF CONVERTER TO GET AN IFF PIC!' DC.B 'WELL THATS ABOUT IT FOR NOW, LOOK OUT FOR V1.1 WHICH MAY HAVE FANCY THINGS LIKE ' DC.B 'CHANGEABLE SCREEN WIDTHS, MODULOS, AND DISPLAY DATA FETCH VALUES! I BET YOU CANT' DC.B 'WAIT, CAN YOU!t nLEFT MOUSE TO RETURN TO GFX-RIP V1.0x' EVEN ********** SECTION GFX-DATA,DATA_C INST INCBIN source:bitmaps/GFXRIP-BANK.RAW FONT INCBIN source:bitmaps/TOPAZ.RAW