Jump to content

F.G. Kaal

  • Content Count

  • Joined

  • Last visited

Community Reputation

74 Excellent

About F.G. Kaal

  • Rank
    Star Raider
  • Birthday 11/19/1961

Profile Information

  • Gender
  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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 |___________|
  9. 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.
  10. 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.
  11. 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
  12. Just to be correct: EDIT80 is the Editor (version 3.0) of the Editor/Assembler module which doesn't need the module with some features added/changed, like: Added: Upper and lower case character set. Added: Menu option Load: Load file. Added: Menu option Save: Save file. Added: Menu option Purge: Purge file. Added: Menu option eXit: Exit the editor. Changed: Menu option Show (line) into Goto (line), used the character S for Save file. Removed: Menu option Tab (edit tabs) ... can't save this anyway. Added: Hollow cursor when in insert mode. Changed: Number of menu lines to 4 (was originally 2). Added: Error messages (if any) on line 3 of the menu. Changed: Maximum file name length from 20 to 40 characters so that files can be loaded from and saved in a sub directory. This editor can be loaded like any other E/A option 5 program and is just a bit below 8Kb in size and loads into the LOMEM (>2000) area. Fred
  13. I can't see anything wrong in the ini file. I can't find anything wrong in the program. Ti99Dir just checks if it is a (image)file or a directory it is about to read. It is a directory but I don't understand why it fails. So I did a quick change ... the code was allready there. When this problem occurs a also call GetLastError() and add this text to the error message. Maybe this give some extra clues. So let me know the results. Latest version is 6.4.a (can't find how to add the zip file, so you have to get it from my website www.ti99-geek.nl)
  14. What happens if a directory is locked out and you reboot your computer without reinstalling Ti99Dir ... can you then select that directory?
  15. Okay ... I did what you did, only my name is Fred. Copied Ti99Dir here: c:\Users\Fred\Documents\Ti99Dir\ Created a shortcut for Ti99Dir Copied Classic99 here: c:\Users\Fred\Documents\classic99\ Created a Dsk8 here: c:\Users\Fred\Documents\classic99\Dsk8\ Configured Dsk8 in classic99 Started Ti99Dir with shortcut. Selected another directory for left and right here: c:\Users\Fred\Documents\classic99\ Copied 200+ TI files into Dsk8 Reread DSK8 in Ti99Dir Files showed up Selected all files and delete them ... nothing wrong Copied 200+ TI files into Dsk8 Started classic99 selected module TI99 workshop Read files of Dsk8 Files showed up (max files =127) Started Ti99Dir with shortcut (Classic99 still active) Selected Dsk8 Selected all files (ctrl numpad +) Deleted files ... nothing wrong I used both keyboard shortcut and menu functions and got the some perfect result.
  • Create New...