Jump to content

F.G. Kaal

  • Content Count

  • Joined

  • Last visited

Community Reputation

93 Excellent

About F.G. Kaal

  • Rank
    Star Raider
  • Birthday 11/19/1961

Profile Information

  • Gender

Recent Profile Visitors

3,836 profile views
  1. I have just used it to create a listing with the correct addresses for debugging with SBUG. After printing the listing I assembled the program agian with just RORG.
  2. My first programmable device was an MK14 sold by the Science of Cambridge of the United Kingdom a firm owned by Sir Clive Sinclair. Bought this one from a class mate in 1978 or so. These boards were also used at school for learning programming in assembly the hard way. We had to look up the hex code for every instruction in a book and calculate the jumps our self. The monitor program of this device was even a subject for an exam. The processor is a National Semiconductor SC/MP INS8060 (SC/MP or "scamp" means Simple Costeffective Micro Processor) and the device had 256 bytes of RAM whch could be expanded to a whoping 640 bytes. My board only has 128 bytes of RAM left because one memory chip is kaputt. Also an IO chip is added which gave the possibility to save and load your tiny programs on a cassette tape. Changed my MK14 a bit with a large display (ariginal had a calculator kind of display) and a better keyboard. Fred
  3. Ti99Dir version 6.4b is ready to download. The problem was in a function that is used to calculate the position and dimensions of all objects in the Ti99Dir window and is called after everything the user does because one or more (other) files could be selected, or the slidebar should be moved or .... etc. In this function the main window was repositioned also when the main window wasn't moved or resized. This triggers sending a new WM_SIZE message. When the taskbar is at the bottom of the screen the position of the main Ti99Dir main window remains the same when the user clicks in this window. For some unknown reason the position of the Ti99Dir main window is appearantly moved to the left or top when the taskbar is at the left or top. The number of pixels moved is equal to the size of the taskbar. Anyway ... I removed the call to a MoveWindow function and everything seems to work fine.
  4. Aha is this the problem! I also see this on my PC now but only happens when the taskbar is at the left or the top of the window. If the taskbar is at the bottom or right side it is all fine. Have seen this problem years ago with Windows NT and a traffic controller simulator (Ti99Dir share parts of the same move/resize/refresh code) when the user also had some Micrososft Office taskbar at the left side of his screen. Every time a line in the traffic controllers simulator was printed the window moved up and disapperead off screen. So this means that if the taskbar is at the left or top side of the screen for some reason a resize or move message is sent to Ti99Dir's window everytime there is some other update needed in that window.
  5. Does it help if I supply the code I use in my Ti994w emulator? Only the nescesarry FILES stuf is used. It is from the documented DSR code from T. Nouspickel's website btw. Fred fdsr4w.a99
  6. After I had read your question again a few seconds ago I uderstand what you are looking for and this is not it, sorry my mistake. You need the implementation of CALL FILES itself. I had the same problem with my facke DSR in my TI994w emulator. The best thing I could come up with was to add bits and pieces of the TI diskcontroller DSR to make it work. Fred
  7. And to keep it short it can be done like this (I leaf the optimisation to you): PABL2 EQU >1580 Level2 PAB in VDP RAM NOF DATA 1 Number of files 1-16 PABCOD DATA >0116 SAVEG BSS 2 FILES MOV @NOF,R0 Number of files SWPB R0 MOVB R0,@>834C Number of files SWPB R0 MOVB R0,@>834D Must be 0 MOVB R0,@>8350 DSR Returned error code MOVB @GRMRA,@SAVEG Save GROM address NOP MOVB @GRMRA,@SAVEG+1 DEC @SAVEG LI R0,PABL2 VDP pab LI R1,PABCOD L2 code LI R2,2 BLWP @VMBW LI R0,PABL2 VDP pab MOV R0,@>8356 BLWP @DSRLNK DATA 10 MOVB @>8350,8 Get Error code etc etc MOVB @SAVEG,@GRMWA Restore GROM address NOP MOVB @SAVEG+1,@GRMWA Fred
  8. I use this code in DM2K to do a (call) FILES(1). It looks like a lot but it is assembler code to be used with the C99 compiler from C. Pulley. You don't need everything but this is the idea. Fred PABL2 EQU >1580 SAVEG BSS 2 PABCOD BSS 2 PABCD2 BSS 2 CRUSRC BSS 2 CRUDST BSS 2 THSCRU BSS 2 LSTCRU BSS 2 * files(nof) int nof; * - allocate bufferspace for number of files * nof: number of files 1-16 * if error returns -1 * FILES MOV @2(14),0 Get nof SWPB 0 MOV 0,@H834C CLR @PABCOD CLR 0 CLR 7 LI 8,>0116 CALL FILES() opcode JMP FMT#2 Search all DSR's * fmtdsk(device, mode, sides, tracks, density, interleave) * char *device; int mode, sides, tracks, density, interleave; * - format a floppy disk * * device: devicenam e.g. "DSK1" * mode : search mode 0= search all DSR's * >0= CRUSRC contains CRU address * sides : number of sides 0,1= single 2=double sided * tracks: number of tracks 40 or 80 * density: disk density 0,1 single density FM 125Kbits/sec * 2 double density MFM 250Kbits/sec * 3 double density MFM 500Kbits/sec * interleave: 1..sectors-1 * default 4 for single density, 5 for double density * * returns: @>8350 number of sectors per disk * FMTDSK BL @GETU#C LI 8,FORFD Format FD CLR 0 Number of sectors MOV 0,@>834A LI 0,BUFL2 VDP buffer MOV 0,@H834E MOV @8(14),0 Sides SWPB 0 MOVB 0,@H8351 MOV @6(14),7 Tracks MOV @2(14),0 Interleave SLA 0,2 A @4(14),0 Density MOV @10(14),2 Search mode? JEQ FMT#2 All DSR's * * differences in Dm2k and Du2k * Du2k allready knows CRU address by calling FCRU * Dm2k doesn't know CRU address and must search * FMT#1 MOV @CRUSRC,@THSCRU after fcru() MOV @CRUSRC,@LSTCRU JMP FMT#3 FMT#2 MOV @FMTCRU+0,@THSCRU search all DSR's MOV @FMTCRU+2,@LSTCRU FMT#3 BL @L2BUF1 MOV @>83D0,@THSCRU MOV @>83D0,@LSTCRU B *13 * Base Level1 routines * * L2BUF0,L2BUF1,L2BUF2 * * Input : R8 Level1 routine code * R7 Byte for @>834D * R0 Byte for @>8350 * Output: - * Uses : R0,R1,R2,R8 L2BUF0 CLR 0 Error code/Aditional info L2BUF1 SWPB 0 MOVB 0,@H8350 L2BUF2 SWPB 7 MOVB 7,@H834D Code/Tracks MOVB @GRMRA,@SAVEG NOP MOVB @GRMRA,@SAVEG+1 DEC @SAVEG A 8,@PABCOD Add L2 function code LI 0,PABL2 VDP pab LI 1,PABCOD L2 code LI 2,2 BLWP @VMBW L0X LI 0,PABL2 VDP pab MOV 0,@>8356 L2BUF3 LI 1,H834C LI 2,>834C MOV *1+,*2+ MOV *1+,*2+ MOV *1+,*2+ MOV *1,*2 BLWP @DSRL10 DATA 10 ** JEQ L4X Error: Bad name and bad idea (05/07/2007) ** because Dm2k can now do setpath for DSKx ** and is it conform TI spec? MOVB @>8350,8 Error code SRL 8,8 CI 8,>30 JEQ L4X not altered CI 8,7 SCSI JLE L1X yes SRL 8,5 L1X CI 8,6 Err 6,7 JNE L2X No C @THSCRU,@LSTCRU JEQ L2X check one controller MOV @CRULST,2 CRU address CI 2,>1100 TI-controller JEQ L0X Yes L2X MOV 8,@ERRNO JEQ L7X L4X SETO 8 Error L7X MOVB @SAVEG,@GRMWA NOP MOVB @SAVEG+1,@GRMWA MOV 8,8 JNE L8X B *11 L8X B *13 * T-SHELL SOURCE CODE BY TRAVIS WATFORD * excerpt taken by B. Harrison - MODIFIED * F.G.Kaal - MODIFIED *---------------------------------------- * Device service routine for DATA >000A * DSRL10 DATA DSRWS,DSR#10 DSRWS BSS 32 DSRWS5 EQU DSRWS+10 H834C BYTE 0 Buffer for ram locations H834D BYTE 0 H834E BYTE 0 H834F BYTE 0 H8350 BYTE 0 H8351 BYTE 0 H8352 BYTE 0 H8353 BYTE 0 NPNTR EQU >8356 NLEN EQU >8354 CRULST EQU >83D0 SAVADD EQU >83D2 VDPWA EQU >8C02 VDPRD EQU >8800 H20 BYTE >20 HAA BYTE >AA EVEN DSR#10 MOV *R14+,R5 Get DSR offset (>A) SZCB @H20,R15 LI R4,1 Pabcod is >01xx DSR2 MOV R4,@NLEN Save name length INC R4 A R4,@NPNTR Adjust name pointer LWPI GPLWS CLR R1 Dsr version etc MOV @THSCRU,R12 This Cru CRUOK MOV R12,@CRULST Save cru address SBO 0 Card on LI R2,>4000 See if a card is present CB *R2,@HAA JNE DSR8A DSR4B A @DSRWS5,R2 Add DSR offset JMP DSR5 DSR4 MOV @SAVADD,R2 Get DSR routine address DSR5 MOV *R2,R2 Any routines? JEQ DSR8A No MOV R2,@SAVADD Save link to next DSR routine address INCT R2 MOV *R2+,R9 Get DSR routine address LI R5,PABCOD The DSR code CB *R5+,*R2+ Name length matches JNE DSR4 No CB *R5+,*R2+ DSR code matches JNE DSR4 No DSR7 INC R1 Next version BL *R9 Call DSR routine JMP DSR4 Error? Try next SBZ 0 Card off LWPI DSRWS RTWP DSR8A SBZ 0 Card off AI R12,>0100 Next C R12,@LSTCRU JL CRUOK DSR8 LWPI DSRWS DSR9 CLR R1 Error 0=bad name MOVB R1,*R13 Error code to R0 of calling program SOCB @H20,R15 Set equal bit for error RTWP
  9. No sorry, I don't own a NanoPeb V2, I only have a V1. I have used a 16550 for one of my early DIY HDX devices though. If somebody has a nanoPeb ROM dump I can have a look. Fred
  10. Just for fun I disassembled the Line-By-Line assembler 3 years ago because I wanted something like this to run in the E/A environment. I have added comments and did the bugfixes as suggested by Stuart Conner. Maybe you can use this. PS: Interesting technique how all opcodes are stored in some kind of compressed table. Fred Lbla.zip
  11. Did some investigation: It is unnescassery for the READY output of the speech synthesizer to go through the PAL or GAL. The speech synthesizer allready has an open collector output (transistor 2N3904) and the READY input of the console has a pullup resistor and is meant to be driven by open collecter outputs.. Have read the manual of the GAL compiler from 1991 ... no signs of any device (PAL nor GAL) that have an open collector output, it is either normal, three-state or registered. Lot of information about the speech synthesizer can be found at Thierry Nouspickel's site (off course): http://www.unige.ch/medecine/nouspikel/ti99/speech.htm
  12. Pinout and formula's are in my first message. The reason that I don't use the GAL20V8 to drive RDYO is that it has to be an open collector output ... I don't know how to program that (yet) for my 1990 GAL compiler. ___________ | V | DBIN [ 1] [24] Vcc | | AMC [ 2] G [23] MEN | A | AMB [ 3] L [22] LED | | AMA [ 4] 2 [21] SBE | 0 | A1 [ 5] V [20] DIR | 8 | A0 [ 6] [19] A5Out | | A3 [ 7] [18] A15Out | | A2 [ 8] [17] G | | A5 [ 9] [16] RDBENA | | A4 [10] [15] RDY0 (not used) | | A15 [11] [14] RDYI (not used) | | Gnd [12] [13] NC |___________|
  13. Programmed a GAL20V8. A have two of those RAVE 99 speech in the box cards. The first one is original and tested this with the original PAL20L8 which works fine off course but with my GAL20V8 the TI system hangs. The second one must have been in my Geneve system in the 90's because the 7805 voltage regulator has been removed. Also pin #14 end pin #15 of the PAL is not conected but these pins are connected together on the PCB. Tried this one on my TI99 system and there were problems, also the speech synthesizer thought so because every CALL SAY() gave me as much UHOH's as characters in the phrase. Replaced the PAL20L8 by the GAL20V8 ... same result, the speech synthesizer only want to say UHOH. Then I saw that the databus buffer chip was a 74HC645 on a socket, replaced this one for a 74HCT245 and now the speech syntheziser can't stop talking (HELLO, #TEXAS INSTRUMENTS#) so I switched of the system ... my poor ears Result: The above code for the GAL20v8 does work, but pin #14 and pin#15 of the GAL must be outside of the socket and these pins must be connected on the PCB. This has something to do whith the RDYO and RDYI signals.
  14. This is a plug and play replacement chip. But I see now on my RAVE board that I have connected RDYI with RDYO (pin#14 with pin #15) and these pins of the GAL are out of the IC-socket and IC-socket is destroyed at these two pins. Could be happened in the proces of why it was not working and found out after destroying the IC-socket. I see in the formulas that RDYO = RDYI * SBE. If you really wan't to know I have to check this.
  15. Just for fun I created a GAL for the Rave Speech in te box. According to the file date I've done this on March the 31st in 1996. Gal-Tispeech.zip ; title TI99/4A Speech in the Box ; pattern TISPEECH ; revision A ; author F. G. Kaal ; Date 960331 ; ; This is a Gal for the addressing logic to place the ; TI99/4a Speech synthesizer in the expansion box. ; The three most significant addressing lines AMA, ; AMB and AMC must be High. ; ; A0 A1 A2 A3 A4 A5 An A15 ; Speech read address >9000 1 0 0 1 0 0 x 0 ; Speech write address >9400 1 0 0 1 0 1 x 0 ; ; DBIN - Databus in, 1= Read data, 0= Write data ; Ama - Most significant address lines ; Amb - / ; Amc - / ; A0 - Address lines to select device ; A1 - / ; A2 - / ; A3 - / ; A4 - / ; A5 - / ; A15 - / ; RDYI - Ready-In, Ready signal from speech synthesizer ; RDYO - Ready-Out, Ready to TI99/4A (open collector output) ; This signals will not be used, because the Speech ; synthesiser is allready equiped with an open collector ; ready signal. If SPEECH-READY is not active, RDYI ; should be pulled high. ; ; RDB - RDBENA, Low active signal to sense the selection of ; the speech synthesizer (open colector) ; G - Low active signal to control the databus driver ; A15O - Address line A15 for the speech synthesizer ; A5O - Address line A5 for the speech synthesizer ; DIR - Signal to control the direction of the databus driver ; SBE - Speech Block Enable, Speech Synthesizer control signal ; LED - Led output signal ; MEN - Memory Enable, Low active chip TISPEECH GAL20V8 ;pin 01 02 03 04 05 06 07 08 09 10 11 12 DBIN Amc Amb Ama A1 A0 A3 A2 A5 A4 A15 GND ;pin 13 14 15 16 17 18 19 20 21 22 23 24 NC RDYI RDYO RDB G A15O A5O DIR SBE LED MEN VCC @define Select "!MEN * Ama * Amb * Amc * A0 * !A1 * !A2 * A3 * !A4 * !A15" equations SBE = Select * !DBIN + Select * DBIN * !A5 DIR = DBIN !G = Select * !DBIN + Select * DBIN * !A5 !LED = Select * !DBIN + Select * DBIN * !A5 A5O = A5 A15O = A15 RDYO = RDYI * SBE RDB = !SBE RDB.trst= SBE
  • Create New...