Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File14.5 Detecting the presence of TosBox, Steem and PaCifiST TOS ; FOR ST PROGRAMMERS - How to detect PaCifiST (0.46 or greater) ; ; When Vsync is called with d6=d7='Emu?' and those registers are ; altered, you can assume you're running under an emulator. ; If d6='PaCi' & d7='fiST', then it's under PaCifiST and a0 points out ; some extra hardware registers: ; ; 0 BYTE major version (BCD) ; 1 BYTE minor version (BCD) ; TosBox ; The approved method, à la PaCifiST, is to call Vsync with d6 = d7 = ; 'Emu?'($456D753F). On return, d6 will contain 'TBox' ($54426f78) and ; d7 will contain the ASCII-encoded version number. ; Steem ; modified 16/4/02 by Anthony Hayward to recognize Steem - that ; returns d6='STEe'=$53544565, d7='mEng'=$6d456e67. Since v2.4 ; a0 points to extra information (read-only unless stated): ; ; 0 BYTE Major version (BCD) ; 1 BYTE Minor version (BCD) ; 2 BYTE Slow motion flag ; 3 BYTE Slow motion speed (%) ; 4 BYTE Fast forward flag ; 5 BYTE Millions of cpu cycles per second (read-write on v3+, ; changes at next VBL) ; 6 BYTE Debug build flag ; 7 BYTE Snapshot loaded flag (read-write). If you set this ; flag to 0 at the start of your program then you ; can detect users loading snapshots. ; 8 WORD Run speed (%) (read-write on v3+) ; 10 WORD How fast Steem is actually managing to run ; as a percentage. If the computer is fast enough ; this will equal run speed most of the time. It ; is updated every 12 VBLs and can jump around a bit. ; ; The following are available on Steem v2.5 and higher: ; ; 12 LONG Cycle count (overflows every 8 minutes at 8Mhz) ; 16 LONG Cycle count at start of frame (last VBL interrupt) ; 20 LONG Cycle count at start of line (last HBL interrupt) ; 24 WORD Signed word containing the number of the current line. ; In low/medium res the first line after the top border ; is 0, the last before the bottom border is 199. ; 26 BYTE Print ST logs in user build flag (read-write). If you ; set this flag then writing the address of a NULL- ; terminated string to 0xffc1f0 will output it to the ; parallel port. In the debug build the string is always ; written to the log file. ; ; The following are available on Steem v3.2 and higher: ; ; 27 BYTE Super video mode (read-write). This register is here ; to allow developers to test Falcon graphics using ; Steem. Possible values are 0 - normal ST mode, ; 1 - Falcon 256 colour (palette at $FF9800), ; 2 - Falcon true colour (16-bit). ; Note: You can't switch to super video from ST high res ; or if Steem is running in 256 colour mode. To check ; for this, read the register back immediately after ; setting it. ; 28 BYTE Super video size (read-write) 0=320x200, 1=640x400, ; 2=320x240, 3=640x480. ; ; There are two write-only registers: ; ; 0 LONG (Steem v3+) This register allows you to create new ; disk images in the user's home directory. You must ; write the address of a string in ST memory that ; contains the disk name and a parameter list separated ; by NULLs; the string must be double NULL-terminated. ; The first parameter is the number of sides the disk ; should have, the second the number of tracks and the ; third sets the sectors per track. All parameters are ; passed as strings. Here is an example: ; ; create_disk_string: dc.b 'New Disk Name',0,'2',0,'80',0,'11',0,0 ; ; That will create a 900 kb disk with the name ; "New Disk Name.st". Once the disk is created it will ; be inserted into drive A. Make sure you delay for half ; a second after creating a new disk before accessing it ; - this allows TOS to detect media change. ; ; 4 BYTE (Steem v3.2+) Writing anything to this address will ; disable the extra hardware registers. When the ; hardware registers are available, some ST programs ; may detect they are running on a Falcon; to stop that, ; write to this when you no longer need the extra ; features. Any writes to extra registers after writing ; a byte here will cause a bus error. ; ; Every address up to offset 31 is reserved for future use (won't ; cause bus errors on read or write). If you want anything put in ; here let us know (steem@@gmx.net). move.l #'Emu?',d5 move.l d5,d7 move.l d5,d6 move #$25,-(a7) trap #$e addq.l #2,a7 move.l a0,regbase cmp.l d5,d6 bne.s under_emu cmp.l d5,d7 bne.s under_emu lea no_emu(pc),a0 bra.s print_and_quit under_emu: cmp.l #'PaCi',d6 bne.s not_pacifist cmp.l #'fiST',d7 bne.s not_pacifist pea getversion_pacifist(pc) move.w #$26,-(a7) trap #$e addq.l #6,a7 lea pacifist_emu(pc),a0 bra.s print_and_quit not_pacifist: cmp.l #"TBox",d6 bne.s not_tosbox move.l #tosbver+1,d0 and #$fffe,d0 move.l d0,a0 move.l d7,(a0) lea tosbox_emu(pc),a0 bra.s print_and_quit not_tosbox: cmp.l #'STEe',d6 bne.s not_steem cmp.l #'mEng',d7 bne.s not_steem pea getversion_steem(pc) move.w #$26,-(a7) trap #$e addq.l #6,a7 lea steem_emu(pc),a0 bra.s print_and_quit not_steem: lea an_emu(pc),a0 print_and_quit: pea (a0) move #9,-(a7) trap #1 addq.l #6,a7 move #1,-(a7) trap #1 addq.l #2,a7 clr.w -(a7) trap #1 getversion_pacifist: move.l regbase(pc),a0 move.b (a0),d0 add.b d0,pacifist_majorv move.b 1(a0),d0 move d0,d1 lsr #4,d1 and #$f,d0 and #$f,d1 add.b d1,pacifist_minorv add.b d0,pacifist_minorv+1 rts getversion_steem: move.l regbase(pc),a0 move.b (a0),d0 add.b d0,steem_majorv move.b 1(a0),d0 move d0,d1 lsr #4,d1 and #$f,d0 and #$f,d1 add.b d1,steem_minorv add.b d0,steem_minorv+1 rts SECTION DATA regbase dc.l 0 no_emu: dc.b "It seems you're running under a",13,10 dc.b "mere ST.",13,10,0 an_emu: dc.b "It seems you're running under an",13,10 dc.b "emulator.",13,10,0 steem_emu: dc.b "You're running under Steem v" steem_majorv: dc.b "0." steem_minorv: dc.b "00.",13,10,0 pacifist_emu: dc.b "You're running under PaCifiST v" pacifist_majorv: dc.b "0." pacifist_minorv: dc.b "00.",13,10,0 tosbox_emu: dc.b "You're running under TOSBOX " tosbver dcb.b 32,5 dc.b 13,10,0