Een muis interrupt aanroep functie voor QBasic:
; Mouse interrupt call procedure for QBasic.
push bp ; Save previous bp.
mov bp,sp ; Set new bp.
push si ; Save si.
mov si,[bp+6] ; Load registers structure offset.
mov ax,[si] ; Load values into CPU registers.
mov cx,[si+2] ;
mov dx,[si+4] ;
mov bx,[si+6] ;
int 0x33 ; Call mouse interrupt.
mov [si],ax ; Save CPU registers to structure.
mov [si+2],cx ;
mov [si+4],dx ;
mov [si+6],bx ;
pop si ; Restore si.
pop bp ; Restore bp.
retf 2 ; Return and remove arguments from stack.
Gewoon assembleren met Nasm of iets soortgelijks.
Een QBasic voorbeeld:
DEFINT A-Z
TYPE RegistersStr
ax AS INTEGER
cx AS INTEGER
dx AS INTEGER
bx AS INTEGER
END TYPE
DECLARE FUNCTION LoadWrapper$ ()
DECLARE SUB CallInt33h ()
DIM SHARED Int33h AS STRING
DIM SHARED Registers AS RegistersStr
CLS
Int33h = LoadWrapper$
Registers.ax = &H1
Registers.cx = &H0
Registers.dx = &H0
Registers.bx = &H0
CallInt33h
DO
Registers.ax = &H3
Registers.cx = &H0
Registers.dx = &H0
Registers.bx = &H0
CallInt33h
LOCATE 1, 1: PRINT Registers.cx, Registers.dx, " ";
LOOP WHILE INKEY$ = ""
END
SUB CallInt33h
DEF SEG = VARSEG(Int33h)
CALL ABSOLUTE(Registers, SADD(Int33h))
END SUB
FUNCTION LoadWrapper$
DIM FileH AS INTEGER
FileH = FREEFILE
OPEN "Int33h.BIN" FOR INPUT LOCK READ WRITE AS FileH
CLOSE FileH
FileH = FREEFILE
OPEN "Int33h.BIN" FOR BINARY LOCK READ WRITE AS FileH
Int33h = INPUT$(LOF(FileH), FileH)
CLOSE FileH
LoadWrapper$ = Int33h
END FUNCTION
Getest met QBasic 1.1 en QuickBASIC 4.5. Werkt waarschijnlijk ook met QuickBASIC 7.1 en VBDos.
Aanpassen om andere registers en interrupts te gebruiken zou eenvoudig moeten zijn. 
Nieuwe versies van programma's oorspronkelijk voor qb45 en aangepast om te werken met QBasic volgen waarschijnlijk binnenkort! 
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Leuk! 
PDS 7.1 heeft als ik me niet vergis CALL INTERRUPT wat mijn projectje daar overbodig maakt.
PS:
In VBDOS moet VARSEG vervangen worden met SSEG! Anders werkt het niet.
[Bericht gewijzigd door Peter Swinkels op (28%)]
Hier is een volledig functionerend programma dat laat zien hoe je de muis kunt gebruiken in QBasic:
https://github.com/PeterSwinkels/QBDraw/
Wat het bijwerken van mijn andere project betreft was ik een beetje te optimistisch. QBasic heeft meer beperkingen ten opzichte van QuickBASIC dan dat ik me realiseerde.
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Op donderdag 23 januari 2025 15:33:26 schreef Peter Swinkels: Getest met QBasic 1.1 en QuickBASIC 4.5.
Met Quickbasic, de compiler, kun je simpelweg de assembler routines meelinken.
Dat zal best, maar het doel was specifiek QBasic uit te breiden. Met QuickBASIC heb je al CALL INTERRUPT dus zijn mijn assembler procedures daar niet nodig. 
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Het wordt pas echt interessant als je interrupt service routines kunt maken, zodat je niet hoeft te pollen maar een interrupt krijgt bij een toetsaanslag, er een update van de muis beschikbaar is, de systeemtimer afloopt, etc.
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Op zondag 26 januari 2025 20:15:18 schreef SparkyGSX:
Het wordt pas echt interessant als je interrupt service routines kunt maken, zodat je niet hoeft te pollen maar een interrupt krijgt bij een toetsaanslag, er een update van de muis beschikbaar is, de systeemtimer afloopt, etc.
Omleiden van interrupts naar eigen ISR code is niet zo ingewikkeld.
Of je daar zoveel aan hebt binnen QBasic is de vraag...
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Dat weet ik, dat heb ik ~25 jaar geleden ook gedaan in DOS met Turbo Pascal en met C. Het is heel gemakkelijk om dat verkeerd te doen en de machine te crashen, in een virtuele machine is dat al wat minder vervelend.
Ik denk niet dat het de TS veel interesseert of je er iets aan hebt, gezien de QBasic in een DOS emulator.
[Bericht gewijzigd door SparkyGSX op (20%)]
Ik heb wel eens programma's in QBasic gezien die zich gedragen als een TSR als ik me het goed herinner. Kun je beter in C of assembleer taal schrijven als je het mij vraagt.
Overigens, met een beetje handigheid kun je zo'n oude programmeertaal nog best veel laten doen. 
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
https://github.com/PeterSwinkels?tab=repositories&q=tsr&type=&…
Ik heb een paar tsr's geschreven in assembleertaal.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik heb o.a. een tsr geschreven voor een ISA watchdogprint (resette de pc als die 'vast' liep en geen antwoord meer gaf...)
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Watchdogprint bevat een microcontroller (8742 of 87C576, die hebben een ISA interface) die door de op de pc draaiende software moet worden aangestuurd binnen een minuut.
Doet 'ie dat niet, dan sluit de watchdog een relais over de resetschakelaar om de pc opnieuw te booten.
Werd heel veel gebruikt bij babbelboxen e.d. (want daar was uitval zeer duur, tot 60 gulden per minuut...
)
En ja, zelfs de beste dos programma's liepen wel eens vast...
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Ja hoor, ongeveer elke microcontroller heeft er één, soms meerdere. In de embedded wereld zijn ze nog heel gebruikelijk.
