BBS: Inland Empire Archive Date: 08-07-92 (13:57) Number: 62 From: JEAN CREPEAU Refer#: NONE To: JAMES VAHN Recvd: NO Subj: Uevent Conf: (2) Quik_Bas
In a message to ALL, JAMES VAHN wrote: JV=> Could someone explain the use of QB4.5's ON UEVENT GOSUB ...? I wish to run a background task and think that's the ticket. I'd like to tap into INT 8 or better yet set up the 8255 PPI and the 8253 timer. Actually would like to see both methods. The ON ... GOSUB is called a trap. You can force QuickBASIC to make an automatic GOSUB on certain events. For instance, you can trap a key sequence, the timer or the joystick. On timer(1) gosub timetrap (cont...) timetrap: print "Another second just passed" return The trap will be executed once every second. The only problem with the QB traps is that they check for the events between instructions (compiled with /v) or between lines (/w). If you INPUT something, no trap will be executed until the instruction is finished (i.e. the user presses enter). You could try to program the INT 8, but making an interrupt subroutine with QuickBASIC is not a good idea. QB doesn't provide any mean to do that anyway. If you want to program the PPI or CTC, it's easy... Here are the internal registers of the PPI and the CRC: PPI+0: Port A (The adress is 60h on XT) PPI+1: Port B (The adress is 61h on XT) PPI+2: Port C (The adress is 62h on XT) PPI+3: Control (The adress is 63h on XT) b7: Always 1 b6-b5: Port A mode (00=mode 0, 01=mode 1, 10=mode 2) b4: Port A dir (0=Output, 1=Input) b3: Port C, high nibble dir (0=Out,1=In) b2: Port B mode (0=mode 0, 1=mode 1) b1: Port B dir (0=Output, 1=Input) b0: Port C, low nibble dir (0=Out, 1=In) Mode 0 is generally used CTC+0: Channel 0 counter I/O (adress=40h) CTC+1: Channel 1 counter I/O (adress=41h) CTC+2: Channel 2 counter I/O (adress=42h) CTC+3: Control (adress=43h) b7-b6: counter select (00=0, 01=1, 10=2, 11=illegal) b5-b4: 00: Temp. freeze counter for reading 01: Read/write the LSB 10: Read/write the MSB 11: Read/write the LSB, then the MSB b3-b1: 000: Mode 0 (restart to count when a new counter is loaded) 001: Mode 1 (restart to count when the trigger activated) x10: Mode 2 (automatic restart when counter is finished) x11: Mode 3 (like 2, but generates a square signal=>sound) 100: Mode 4 (like 0, but generates a pulse) 101: Mode 5 (like 1, but generates a pulse) b0: counter type (0=16-bit, 1=BCD) Normally, all input clocks for the three timers are connected to a 1.19047 MHz clock. Channel 0 is used for DOS internal clock. Channel 1 is used for RAM refresh. And channel 2 is used for sound generation. For instance if you want to program channel 2 for sound: Out 43h,10110110 (Program channel 2, LSB/MSB, mode 3 in 16-bit) Counter&=1190470/Freq MSB%=int(Counter&/256) LSB%=Counter& and 255 Out 42h,LSB% Out 42h,MSB% Out 61h,In(61h) or 3 The last line is used to activate the speaker with the channel 2, by setting bits 0 and 1 of PPI Port B to 1. Jean --- * Origin: INTERACESS Montreal (QC) Canada (514) 528-1415 (1:167/280)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET