home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
No Fragments Archive 10: Diskmags
/
nf_archive_10.iso
/
MAGS
/
ST_USER
/
1990
/
USERSP90.MSA
/
SNAP.ARC
/
SNAP.S
next >
Wrap
Text File
|
1990-07-12
|
4KB
|
125 lines
***********************************************************
* Degas snapshot utility v1 - Save screen if: *
* Control+Alternate+both Shift keys held down *
* Written using HiSoft Devpac *
* Last modified 22/02/90 (c) 1990 by M.Murray *
***********************************************************
* Display start-up message
PEA message(PC) string address
MOVE #9,-(A7) c_conws
TRAP #1 GEMDOS
ADDQ.L #6,A7 tidy stack
MOVE #500,D0 delay loop
delay1 MOVE #1000,D1 waste time by doing sums!
delay2 MOVE #-1,D2
MULU D2,D2
DBRA D1,delay2
DBRA D0,delay1
* Call revect in supervisor mode to alter TRAP #13 vector
PEA revect(PC) stack address of subroutine
MOVE #$26,-(SP) superx
TRAP #14 XBIOS
ADDQ.L #6,A7 restore stack
* Exit to desktop, but keep program in memory
MOVE.L 4(A7),A5 Get basepage address in A5
MOVE.L $C(A5),D0 get text segment size in D0
ADD.L $14(A5),D0 add data segment size
ADD.L $1C(A5),D0 add uninitialised bit
ADD.L #$100,D0 add basepage size
CLR -(A7) exit code = 0
MOVE.L D0,-(A7) number of bytes to keep
MOVE #49,-(A7) p_termres
TRAP #1 GEMDOS
* Revector TRAP #13 through my code (in supervisor mode)
revect LEA oldtrap(PC),A0
MOVE.L $B4,(A0) copy TRAP #13 vector to oldtrap
LEA code(PC),A0
MOVE.L A0,$B4 insert code address into TRAP #13
RTS
* All TRAP #13 calls now pass through here
code MOVEM.L D0-D3/A0-A3,-(A7) Save registers
LEA flag(PC),A3 A0 -> flag
TAS (A3) routine on or off?
BNE exit IF flag<>0 THEN exit
MOVE #-1,-(A7) read keyboard shift bits
MOVE #11,-(A7) kbshift
TRAP #13 Gem Bios
ADDQ.L #4,A7 tidy stack
ANDI #15,D0 bits 0/1/2/3 are key status
CMPI #15,D0 all pressed?
BNE quit quit if not
* This code is executed if all keys are pressed
MOVE #4,-(A7) _getrez...in D0
TRAP #14 XBIOS
ADDQ.L #2,A7 tidy stack
LEA header(PC),A0 A0 -> header
MOVE D0,(A0) put resolution in 1st word of header
LEA name(PC),A0 A0 -> filename
ADDQ.B #1,5(A0) increment letter in filename SNAP_?.PI?
ADDI #49,D0 make res into '1'/'2'/'3'
MOVE.B D0,9(A0) put resolution in name...PI1-PI3
CLR -(A7) filespec = 0 = read/write
PEA name(PC) filename
MOVE #60,-(A7) f_create.....create file
TRAP #1 GEMDOS
ADDQ.L #8,A7 tidy stack
MOVE D0,D3 save file handle in D3
PEA palette(PC) get palette in supervisor mode
MOVE #38,-(A7) superx
TRAP #14 XBIOS
ADDQ.L #6,A7 tidy stack
PEA header(PC) address of memory to save
MOVE.L #34,-(A7) 34 bytes to write
MOVE D3,-(A7) file handle
MOVE #64,-(A7) f_write.....save header
TRAP #1 GEMDOS
ADDA.L #12,A7 tidy stack
MOVE #2,-(A7) _physbase...in D0
TRAP #14 XBIOS
ADDQ.L #2,A7 tidy stack
MOVE.L D0,-(A7) screen address
MOVE.L #32000,-(A7) 32k to save
MOVE D3,-(A7) file handle
MOVE #64,-(A7) f_write.....save screen
TRAP #1 GEMDOS
ADDA.L #12,A7 tidy stack
MOVE D3,-(A7) file handle
MOVE #62,-(A7) f_close.....close file
TRAP #1 GEMDOS
ADDQ.L #4,A7 tidy stack
quit CLR.B (A3) reset flag to turn routine back on
exit MOVEM.L (A7)+,D0-D3/A0-A3 Restore registers
DC.W $4EF9 JMP $xxxxxxxx - old vector address
oldtrap DC.L 0
***********************************************************
* Subroutine to get the palette in supervisor mode
***********************************************************
palette LEA header+2(PC),A0 A1 -> header+2
LEA $FF8240,A1
MOVE #7,D0
ploop MOVE.L (A1)+,(A0) copy palette into header
ANDI.L #$07770777,(A0)+ mask off unwanted bits
DBRA D0,ploop
RTS
flag DC.W 0 flag for switching routine on/off
name DC.B 'SNAP_@.PI1',0 filename
EVEN
header DS.W 17 Degas header...34 bytes
message DC.B 13,10,' Snap v1.0 is now installing...',13,10
DC.B 13,10,' Press: Control + Alternate + both'
DC.B 13,10,' Shift keys to save the screen...',0