Dec 192017
This is a short list of very handy poke and peek addresses for QuickBasic Programmer’s. | |||
---|---|---|---|
File Name | File Size | Zip Size | Zip Type |
POKEPEEK.TXT | 7343 | 2752 | deflated |
TPCREAD.ME | 199 | 165 | deflated |
Download File POKEPEEK.ZIP Here
Contents of the POKEPEEK.TXT file
03/03/84
COMMONLY USED BASIC PEEKS, POKES AND SUBROUTINES
DUE TO THE LACK OF A COMPREHENSIVE, PUBLISHED DIRECTORY OF COMMONLY USED
POKES, PEEKS AND SUBROUTINES THIS LIST HAS BEEN COMPILED BY THE SMUG
PROSIG AS WELL AS A MANY OTHER HARDWORKING PD SOURCES. THANKS AND A TIP
OF THE HAT TO ALL CONTRIBUTORS! ADDITIONS TO THE LIST ARE ENCOURAGED AND
SHOULD BE ADDRESS TO:
DON WATKINS, CIS IBMSIG 76003,252
THERE ARE, OF COURSE NO WARRENTIES OR GUARENTEES THAT ANY OF STUFF WORKS
AND FURTHERMORE, IF IT BLOWS UP YOUR MACHINE IT AIN'T MY FAULT.
------------------------------------------------------------------------
BY SPECIFYING A DEF SEG=&H40 IN ANY BASIC PROGRAM, IT IS POSSIBLE TO
REFERENCE THE FOLLOWING VECTORS (FIELDS) IN THE ROM BIOS AREA BY USING A
PEEK FUNCTION AND THE FOLLOWING OFFSETS FROM THE CURRENT SEGMENT AS
DEFINED BY THE DEF SEG STATEMENT.
&H0 - RS232 ADDRESSES ON YOUR IBM PC.
THIS WILL ALLOW YOU TO TELL HOW MANY (UP TO
FOUR) ASYNC CARDS ARE ATTACHED, IF ANY.
&H8 - PRINTER ADDRESSES ON YOUR IBM PC.
THIS WILL TELL YOU WHAT PRINTER ADDRESSES,
AND HOW MANY (UP TO FOUR) EXIST. EACH IS
ADDRESSED BY A TWO BYTE HEX VALUE.
&H10 - EQUIPMENT FLAG.
THIS FIELD DESCRIBES THE SETTING OF THE
OPTIONS SWITCHES. IT DESCRIBES WHAT OPTIONAL
DEVICES ARE ATTACHED TO THE SYSTEM. THE
FOLLOWING LISTS THE BIT-SIGNIFICANCE OF THIS
FIELD:
BIT 0 - INDICATES THAT THERE ARE DISKETTE
DRIVES ON THE SYSTEM.
BIT 1 - NOT USED.
BIT 2,3 - PLANAR RAM SIZE (00=16K 10=32K 01=48K
11=64K)
BIT 4,5 - INITIAL VIDEO MODE (00=UNUSED
10=40X25 COLOR
01=80X25 COLOR
11=80X25 MONO)
BIT 6,7 - NUMBER OF DISKETTE DRIVES (00=1 10=2
01=3 11=4) ONLY IF BIT 0 = 1.
BIT 8 - UNUSED
BIT 9,10,11 - NUMBER OF RS232 CARDS ATTACHED
BIT 12 - GAME I/O ATTACHED
BIT 13 - NOT USED
BIT 14,15 - NUMBER OF PRINTERS ATTACHED
&H13 - MEMORY SIZE IN K BYTES.
&H15 - I/O RAM SIZE IN K BYTES.
&H17 - KEYBOARD FLAG -- THE FOLLOWING LISTS THE MASKS
SET TO DESCRIBE CURRENT KEYBOARD STATUS:
BYTE 1;
&H80 - INSERT STATE ACTIVE
&H40 - CAPS LOCK STATE HAS BEEN TOGGLED
&H20 - NUM LOCK STATE HAS BEEN TOGGLED
&H10 - SCROLL LOCK STATE HAS BEEN TOGGLED
&H08 - ALTERNATE SHIFT KEY DEPRESSED
&H04 - CONTROL SHIFT KEY DEPRESSED
&H02 - LEFT SHIFT KEY DEPRESSED
&H01 - RIGHT SHIFT KEY DEPRESSED
BYTE 2;
&H80 - INSERT KEY IS DEPRESSED
&H40 - CAPS LOCK KEY IS DEPRESSED
&H20 - NUM LOCK KEY IS DEPRESSED
&H10 - SCROLL LOCK KEY IS DEPRESSED
&H08 - SUSPEND KEY HAS BEEN TOGGLED
&H49 - CURRENT CRT MODE
&H00 - 40X25 BW
&H01 - 40X25 COLOR
&H02 - 80X25 BW
&H03 - 80X25 COLOR
&H04 - 320X200 COLOR
&H05 - 320X200 BW
&H06 - 640X200 BW
&H07 - 80X25 B&W CARD -- SPECIALIZED USE, USED
INTERNAL TO THE VIDEO ROUTINES.
&H4A - NUMBER OF CRT COLUMNS
&H50 - CURSOR POSITION (ONE OF EIGHT)
&H60 - CURRENT CURSOR MODE
&H6C - LOW WORD OF TIMER COUNT
&H6E - HIGH WORD OF TIMER COUNT
&H71 - &H07 - BREAK KEY DEPRESSED
&HFA6E - BEGINNING OF CHARACTER REGEN MEMORY
&HFF53 - PRTSC ROUTINE ADDRESS
------------------------------------------------------------------
REAL STUFF--
TOGGLE NUM LOCK
DEG SEG = &H40 : POKE &H17, PEEK(&H17) OR 32 'TO TURN ON
DEG SEG = &H40 : POKE &H17, PEEK(&H17) AND 223 'TO TURN OFF
TOGGLE CAPS LOCK
DEG SEG = &H40 : POKE &H17, PEEK(&H17) OR 64 'TO TURN ON
DEG SEG = &H40 : POKE &H17, PEEK(&H17) AND 171 'TO TURN OFF
SET SCROLL WINDOW
10 DEF SEG : POKE 91,20 : POKE 92,25 'SETS UP WINDOW ON LINE
20 LOCATE X,20 'FORCE CURSOR TO WINDOW
SET WINDOW WIDTH
DEF SEG : POKE 41,30 'SETS WINDOW WIDTH TO 30
RESTORE FUNCTION KEYS TO DEFAULT
10 DEF SEG = &HFACE
20 K = 1
30 I = 13
40 T$ = STRING$(13,32): J = 1
50 T1 = PEEK(I):IF T1 < 0 THEN MID$(T$,J,1) = CHR$(T1):J = J + 1:
I = I + 1 : GOTO 50
60 KEY K,LEFT$(T$,J-1):IF K <10 THEN K = K + 1: I = I + 1: GOTO 40 :
ELSE KEY ON
DETERMINE MONITOR TYPE
10 DEF SEG = 0
20 MONITOR.TYPE = PEEK(&H410) AND &H40
30 IF MONITOR.TYPE = 1 PRINT "40 X 25 COLOR"
40 IF MONITOR.TYPE = 32 PRINT "80 X 25 COLOR"
50 IF MONITOR.TYPE = 48 PRINT "MONOCHROME"
DETERMINE AMOUNT OF MEMORY INSTALLED (ONLY WORKS FOR GREATER THAN 48K)
DEF SEG = 0: MEMORY% = PEEK(&H413)+(256*PEEK(&H414))
OR, PUT ANOTHER WAY:
MEMORY INFO: DEF SEG=0
((PEEK(1040) AND 12) + 4 ) * 4 -MEMORY ON MOTHER-BOARD
PEEK(1045) + 256 * PEEK(1046) -EXPANSION MEMORY (ADD ON)
PEEK(1043) + 256 * PEEK(1044) -TOTAL MEMORY
READ DRIVE SWITCHES
DEF SEG = 0: NUMBER.OF.DRIVES% = PEEK(&H410) AND &HC0
CURRENT DISK INFO: DEF SEG=64
DEF SEG=64
PEEK(69)- TRACK
PEEK(70)- HEAD
PEEK(71)- SECTOR
256^PEEK(72)- BYTES PER SECTOR
DETERMINE IF GAME ADAPTER EXISTS
10 DEF SEG = 0: GAME.ADAPTER% = PEEK(&H411) AND &H10
20 IF GAME.ADAPTER% = 0 THEN GAME.ADAPTER$ = "NO" ELSE GAME.ADAPTER$
= "YES --INSTALLED"
KEYBOARD STUFF
TO DISABLE ENTIRE KEYBOARD: DEF SEG=64: OUT 97,204
TO RE-ENABLE KEYBOARD: DEF SEG=64: OUT 97,76
PRINTER STATUS--- AT LEAST ON EPSON ---
DEF SEG=64
A=PEEK(8)+256*PEEK(9)
B=(INP(A+1) AND 248) XOR 72
IF (B AND 128)<>128 THEN PRINTER OFF LINE ELSE ON LINE
INITIALIZE PRINTER: DEF SEG: OUT A+2,8
OUT A+2,12
NOTE:THE A TO INITIALIZE IS FROM PRINTER STATUS ROUTINE
A SHORT PROGRAM TO DISABLE AND RE-ENABLE CTRL BREAK FOLLOWS.
100 DIM OLD%(4)
110 DEF SEG=0
120 ' SAVE THE OLD CONTROL BREAK ADDRESS
130 FOR I=&H6C TO &H6F
140 OLD%(I-&H6C)=PEEK(I)
150 NEXT
160 ' ESTABLISH NEW CONTROL BREAK ADDRESS (POINT TO IRET)
170 POKE &H6C,&H53
180 POKE &H6D,&HFF
190 POKE &H6E,&H0
200 POKE &H6F,&HF0
210 DEF SEG
220 ' RESET OLD CONTROL BREAK ADDRESS
230 DEF SEG=0
240 FOR I=&H6C TO &H6F
250 POKE I,OLD%(I-&H6C)
260 NEXT
SAVE AND RESTORE A SCREEN IMAGE
1 DEF SEG = &HB800 'SAVE SCREEN IMAGE...CHANGE FOR
2 INPUT FILENAME$ 'MONOCHROME.
3 BSAVE FILENAME$,0,&H4000
1000 INPUT "FILENAME";FILENAME$ 'RESTORE IMAGE
1010 CLS
1020 DEF SEG = &HB800 'CHANGE TO &HB000 TO MONO
1030 BLOAD FILENAME$
NICE TO KNOW
BASIC UNPROTECT
ENTER BASICA
TYPE BSAVE "UN.P",1124,1
LOAD "MYPROG
BLOAD "UN.P",1124
THE PROGRAM CAN NOW BE LISTED, EDITED AND SAVED AS A NORMAL FILE.
THE LIST IS GROWING BUT COULD BE LONGER! ANY AND ALL ADDITIONS OF
COMMONLY USED SUBROUTINES AND PEEK/POKE LOCATIONS WILL BE GLADLY ADDED.
ADDRESS ALL ADDITIONS TO: DON WATKINS CIS 76003,252 (IBMSIG). WITH A
BIT OF YOUR ASSISTANCE THIS DOCUMENT CAN BECOME AN EFFECTIVE TOOL FOR THE
BASIC PROGRAMMER.... SO CHIP IN.
COMMONLY USED BASIC PEEKS, POKES AND SUBROUTINES
DUE TO THE LACK OF A COMPREHENSIVE, PUBLISHED DIRECTORY OF COMMONLY USED
POKES, PEEKS AND SUBROUTINES THIS LIST HAS BEEN COMPILED BY THE SMUG
PROSIG AS WELL AS A MANY OTHER HARDWORKING PD SOURCES. THANKS AND A TIP
OF THE HAT TO ALL CONTRIBUTORS! ADDITIONS TO THE LIST ARE ENCOURAGED AND
SHOULD BE ADDRESS TO:
DON WATKINS, CIS IBMSIG 76003,252
THERE ARE, OF COURSE NO WARRENTIES OR GUARENTEES THAT ANY OF STUFF WORKS
AND FURTHERMORE, IF IT BLOWS UP YOUR MACHINE IT AIN'T MY FAULT.
------------------------------------------------------------------------
BY SPECIFYING A DEF SEG=&H40 IN ANY BASIC PROGRAM, IT IS POSSIBLE TO
REFERENCE THE FOLLOWING VECTORS (FIELDS) IN THE ROM BIOS AREA BY USING A
PEEK FUNCTION AND THE FOLLOWING OFFSETS FROM THE CURRENT SEGMENT AS
DEFINED BY THE DEF SEG STATEMENT.
&H0 - RS232 ADDRESSES ON YOUR IBM PC.
THIS WILL ALLOW YOU TO TELL HOW MANY (UP TO
FOUR) ASYNC CARDS ARE ATTACHED, IF ANY.
&H8 - PRINTER ADDRESSES ON YOUR IBM PC.
THIS WILL TELL YOU WHAT PRINTER ADDRESSES,
AND HOW MANY (UP TO FOUR) EXIST. EACH IS
ADDRESSED BY A TWO BYTE HEX VALUE.
&H10 - EQUIPMENT FLAG.
THIS FIELD DESCRIBES THE SETTING OF THE
OPTIONS SWITCHES. IT DESCRIBES WHAT OPTIONAL
DEVICES ARE ATTACHED TO THE SYSTEM. THE
FOLLOWING LISTS THE BIT-SIGNIFICANCE OF THIS
FIELD:
BIT 0 - INDICATES THAT THERE ARE DISKETTE
DRIVES ON THE SYSTEM.
BIT 1 - NOT USED.
BIT 2,3 - PLANAR RAM SIZE (00=16K 10=32K 01=48K
11=64K)
BIT 4,5 - INITIAL VIDEO MODE (00=UNUSED
10=40X25 COLOR
01=80X25 COLOR
11=80X25 MONO)
BIT 6,7 - NUMBER OF DISKETTE DRIVES (00=1 10=2
01=3 11=4) ONLY IF BIT 0 = 1.
BIT 8 - UNUSED
BIT 9,10,11 - NUMBER OF RS232 CARDS ATTACHED
BIT 12 - GAME I/O ATTACHED
BIT 13 - NOT USED
BIT 14,15 - NUMBER OF PRINTERS ATTACHED
&H13 - MEMORY SIZE IN K BYTES.
&H15 - I/O RAM SIZE IN K BYTES.
&H17 - KEYBOARD FLAG -- THE FOLLOWING LISTS THE MASKS
SET TO DESCRIBE CURRENT KEYBOARD STATUS:
BYTE 1;
&H80 - INSERT STATE ACTIVE
&H40 - CAPS LOCK STATE HAS BEEN TOGGLED
&H20 - NUM LOCK STATE HAS BEEN TOGGLED
&H10 - SCROLL LOCK STATE HAS BEEN TOGGLED
&H08 - ALTERNATE SHIFT KEY DEPRESSED
&H04 - CONTROL SHIFT KEY DEPRESSED
&H02 - LEFT SHIFT KEY DEPRESSED
&H01 - RIGHT SHIFT KEY DEPRESSED
BYTE 2;
&H80 - INSERT KEY IS DEPRESSED
&H40 - CAPS LOCK KEY IS DEPRESSED
&H20 - NUM LOCK KEY IS DEPRESSED
&H10 - SCROLL LOCK KEY IS DEPRESSED
&H08 - SUSPEND KEY HAS BEEN TOGGLED
&H49 - CURRENT CRT MODE
&H00 - 40X25 BW
&H01 - 40X25 COLOR
&H02 - 80X25 BW
&H03 - 80X25 COLOR
&H04 - 320X200 COLOR
&H05 - 320X200 BW
&H06 - 640X200 BW
&H07 - 80X25 B&W CARD -- SPECIALIZED USE, USED
INTERNAL TO THE VIDEO ROUTINES.
&H4A - NUMBER OF CRT COLUMNS
&H50 - CURSOR POSITION (ONE OF EIGHT)
&H60 - CURRENT CURSOR MODE
&H6C - LOW WORD OF TIMER COUNT
&H6E - HIGH WORD OF TIMER COUNT
&H71 - &H07 - BREAK KEY DEPRESSED
&HFA6E - BEGINNING OF CHARACTER REGEN MEMORY
&HFF53 - PRTSC ROUTINE ADDRESS
------------------------------------------------------------------
REAL STUFF--
TOGGLE NUM LOCK
DEG SEG = &H40 : POKE &H17, PEEK(&H17) OR 32 'TO TURN ON
DEG SEG = &H40 : POKE &H17, PEEK(&H17) AND 223 'TO TURN OFF
TOGGLE CAPS LOCK
DEG SEG = &H40 : POKE &H17, PEEK(&H17) OR 64 'TO TURN ON
DEG SEG = &H40 : POKE &H17, PEEK(&H17) AND 171 'TO TURN OFF
SET SCROLL WINDOW
10 DEF SEG : POKE 91,20 : POKE 92,25 'SETS UP WINDOW ON LINE
20 LOCATE X,20 'FORCE CURSOR TO WINDOW
SET WINDOW WIDTH
DEF SEG : POKE 41,30 'SETS WINDOW WIDTH TO 30
RESTORE FUNCTION KEYS TO DEFAULT
10 DEF SEG = &HFACE
20 K = 1
30 I = 13
40 T$ = STRING$(13,32): J = 1
50 T1 = PEEK(I):IF T1 < 0 THEN MID$(T$,J,1) = CHR$(T1):J = J + 1:
I = I + 1 : GOTO 50
60 KEY K,LEFT$(T$,J-1):IF K <10 THEN K = K + 1: I = I + 1: GOTO 40 :
ELSE KEY ON
DETERMINE MONITOR TYPE
10 DEF SEG = 0
20 MONITOR.TYPE = PEEK(&H410) AND &H40
30 IF MONITOR.TYPE = 1 PRINT "40 X 25 COLOR"
40 IF MONITOR.TYPE = 32 PRINT "80 X 25 COLOR"
50 IF MONITOR.TYPE = 48 PRINT "MONOCHROME"
DETERMINE AMOUNT OF MEMORY INSTALLED (ONLY WORKS FOR GREATER THAN 48K)
DEF SEG = 0: MEMORY% = PEEK(&H413)+(256*PEEK(&H414))
OR, PUT ANOTHER WAY:
MEMORY INFO: DEF SEG=0
((PEEK(1040) AND 12) + 4 ) * 4 -MEMORY ON MOTHER-BOARD
PEEK(1045) + 256 * PEEK(1046) -EXPANSION MEMORY (ADD ON)
PEEK(1043) + 256 * PEEK(1044) -TOTAL MEMORY
READ DRIVE SWITCHES
DEF SEG = 0: NUMBER.OF.DRIVES% = PEEK(&H410) AND &HC0
CURRENT DISK INFO: DEF SEG=64
DEF SEG=64
PEEK(69)- TRACK
PEEK(70)- HEAD
PEEK(71)- SECTOR
256^PEEK(72)- BYTES PER SECTOR
DETERMINE IF GAME ADAPTER EXISTS
10 DEF SEG = 0: GAME.ADAPTER% = PEEK(&H411) AND &H10
20 IF GAME.ADAPTER% = 0 THEN GAME.ADAPTER$ = "NO" ELSE GAME.ADAPTER$
= "YES --INSTALLED"
KEYBOARD STUFF
TO DISABLE ENTIRE KEYBOARD: DEF SEG=64: OUT 97,204
TO RE-ENABLE KEYBOARD: DEF SEG=64: OUT 97,76
PRINTER STATUS--- AT LEAST ON EPSON ---
DEF SEG=64
A=PEEK(8)+256*PEEK(9)
B=(INP(A+1) AND 248) XOR 72
IF (B AND 128)<>128 THEN PRINTER OFF LINE ELSE ON LINE
INITIALIZE PRINTER: DEF SEG: OUT A+2,8
OUT A+2,12
NOTE:THE A TO INITIALIZE IS FROM PRINTER STATUS ROUTINE
A SHORT PROGRAM TO DISABLE AND RE-ENABLE CTRL BREAK FOLLOWS.
100 DIM OLD%(4)
110 DEF SEG=0
120 ' SAVE THE OLD CONTROL BREAK ADDRESS
130 FOR I=&H6C TO &H6F
140 OLD%(I-&H6C)=PEEK(I)
150 NEXT
160 ' ESTABLISH NEW CONTROL BREAK ADDRESS (POINT TO IRET)
170 POKE &H6C,&H53
180 POKE &H6D,&HFF
190 POKE &H6E,&H0
200 POKE &H6F,&HF0
210 DEF SEG
220 ' RESET OLD CONTROL BREAK ADDRESS
230 DEF SEG=0
240 FOR I=&H6C TO &H6F
250 POKE I,OLD%(I-&H6C)
260 NEXT
SAVE AND RESTORE A SCREEN IMAGE
1 DEF SEG = &HB800 'SAVE SCREEN IMAGE...CHANGE FOR
2 INPUT FILENAME$ 'MONOCHROME.
3 BSAVE FILENAME$,0,&H4000
1000 INPUT "FILENAME";FILENAME$ 'RESTORE IMAGE
1010 CLS
1020 DEF SEG = &HB800 'CHANGE TO &HB000 TO MONO
1030 BLOAD FILENAME$
NICE TO KNOW
BASIC UNPROTECT
ENTER BASICA
TYPE BSAVE "UN.P",1124,1
LOAD "MYPROG
BLOAD "UN.P",1124
THE PROGRAM CAN NOW BE LISTED, EDITED AND SAVED AS A NORMAL FILE.
THE LIST IS GROWING BUT COULD BE LONGER! ANY AND ALL ADDITIONS OF
COMMONLY USED SUBROUTINES AND PEEK/POKE LOCATIONS WILL BE GLADLY ADDED.
ADDRESS ALL ADDITIONS TO: DON WATKINS CIS 76003,252 (IBMSIG). WITH A
BIT OF YOUR ASSISTANCE THIS DOCUMENT CAN BECOME AN EFFECTIVE TOOL FOR THE
BASIC PROGRAMMER.... SO CHIP IN.
December 19, 2017
Add comments