Jump to content
IGNORED

Atari 1050 - Track Display


macsonny

Recommended Posts

7 minutes ago, xrbrevin said:

the schematic with the 2x 7-segment displays is called HAPPY4.pdf - look to the top-right of the image

Aaaahhh, for some reason I missed that file and re-downloaded the ZIP and see it now.

 

So reading the digram, it looks like the output of the 6264 D0-D5 (PINs 13,12,11,18,17 and 16) drivers the display driver IC's (4543B x 2) and that's all that's needed?

 

It's looks like all the other logic going to the jumper (J2) is for some other logic?

 

Thoughts?

Link to comment
Share on other sites

21 minutes ago, xrbrevin said:

i think the green/red/yellow reference below is for the density LEDs

I agree. So if you have a Happy (like this) then in theory the LED track display looks relatively simple. Only thing baffling me a little is what is the B1, B2 and B3 at the top?

 

Link to comment
Share on other sites

47 minutes ago, macsonny said:

I agree. So if you have a Happy (like this) then in theory the LED track display looks relatively simple. Only thing baffling me a little is what is the B1, B2 and B3 at the top?

 

This jumper allows selecting either common anode or common cathode 7-segment LED displays. 

I determined this from the 4543B datasheet: 

https://pdf1.alldatasheet.com/datasheet-pdf/view/111462/ETC1/4543B.html

Edited by BillC
  • Like 2
Link to comment
Share on other sites

12 hours ago, macsonny said:

The trick is to work out how the track counter works when moving from say track 4 to track 21 in a single jump.

It doesn't do a single step, it loads the X register with the number of steps required from it's current track (which is stored in RAM) to

the required track and steps the required amount in one loop, direction is determined by subtracting start from destination.

 

From what I see in the code, it does 3 steps/track so for 4 to 21 it would be 17 * 3 steps.

 

I'll try confirm later if I managed to find some space to set up one of my 130XE's and a 1050, although both mine have

US Doubler fitted, but would think the step rate would be similar especially if I use a standard DOS 2.0 disk.

Link to comment
Share on other sites

6 minutes ago, TGB1718 said:

It doesn't do a single step, it loads the X register with the number of steps required from it's current track (which is stored in RAM) to

the required track and steps the required amount in one loop, direction is determined by subtracting start from destination.

 

From what I see in the code, it does 3 steps/track so for 4 to 21 it would be 17 * 3 steps.

 

I'll try confirm later if I managed to find some space to set up one of my 130XE's and a 1050, although both mine have

US Doubler fitted, but would think the step rate would be similar especially if I use a standard DOS 2.0 disk.

Let me know what you work out so I can try here. I'v been trying to reverse engineer the Happy Drive 3 given above against my Happy Drive version. I was doing ok as I found the 6264 on the schematic aligned with the 7104 flash RAM I have on my Happy board. However, I got stuck when trying to work out where PIN 1 on the schematic aligns to my Happy board. I've given up on that approach.

Link to comment
Share on other sites

23 minutes ago, Chri O. said:

I wonder if I just select the right two pins and just use some encoder Arduino Library :?

Sounds like an approach. Maybe just build a simple logic counter and see what gets displayed - then try and work the logic for track count?

  • Like 1
Link to comment
Share on other sites

Sorry but it's been a while since I've been playing with real 8-bit Atari Drives. When you power up the 1050 drive @ Boot sequence can you confirm you can hear the stepper motor running fast (going out) and then slow going back to track 0 slow ?

 

DS1104Z_30-04-2022_22-13-46.6__7.png

Link to comment
Share on other sites

Been toying with some ideas for a standard 1050 and maybe a US Doubler drive, still a little way off designing

the hardware bit, nearly complete with the circuit, but at least I got an RP2040 Pico to use a small display

(only reason it's been a pain is virtually every example uses Micro-Python (I just don't get why it seems so popular, maybe just showing my age)

I use the Arduino IDE which is "C" orientated.

 

Anyway a short video to show how the display will look when running, need to find a small plastic case to house the display,

I chose this size as it will fit nicely on the front of the 1050.

 

Will update as I progress. 

  • Like 4
Link to comment
Share on other sites

Hello guys

 

Back in the days, somebody I knew had two seven segment displays (or a dual seven segment display) in his 1050 where the power switch used to be.  IIRC the power LED (which was no longer needed) was replaced with a push switch.  It looked like it could have come from Atari that way.

 

Sincerely

 

Mathy

 

Link to comment
Share on other sites

13 hours ago, Mathy said:

Hello guys

 

Back in the days, somebody I knew had two seven segment displays (or a dual seven segment display) in his 1050 where the power switch used to be.  IIRC the power LED (which was no longer needed) was replaced with a push switch.  It looked like it could have come from Atari that way.

 

Sincerely

 

Mathy

 

Clever!

 

Link to comment
Share on other sites

Note:

This sketch was tested on Teensy 4.0

/*********************************************************************
  MIT License
  Copyright (c) [2022] [Chris O.]
  Atari 1050 - Track Display, ver 01.

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
*********************************************************************/

// https://github.com/wonho-maker/Adafruit_SH1106
/*********************************************************************
  Change the adafruit SSD1306 to SH1106
  SH1106 driver don't provide several functions such as scroll commands.
*********************************************************************/
// Teensy SH1106 driver fix https://forum.pjrc.com/threads/68174-OLED-problems

const byte VER = 1;

const byte interruptPin_NS01 = 2; // NS01 @  U2 ic pin 2, NOT USED FOR interrupt.
const byte interruptPin_NS02 = 3; // NS02 @  U2 ic pin 7
const byte interruptPin_NS03 = 4; // NS03 @  U3 ic pin 2  NOT USED FOR interrupt.
const byte interruptPin_NS04 = 5; // NS04 @  U3 ic pin 7
const byte N_TRACK00_Pin =     6; // Q5 @ R#59 Track 00 sensor.
volatile byte Tcount = 0;
byte NewTcount = Tcount;
byte OldTcount = Tcount;

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h> // OLED 1.30" @ I2C addr. 0x3C

#define OLED_RESET -1 // -1, NO RESET
Adafruit_SH1106 display(OLED_RESET);

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000
};

void setup() {
  Serial.begin(9600);

  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SH1106_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64), SH1106 addr 0x3C.
  // init done

  // Show image buffer on the display hardware.
  // Since the buffer is intialized with an Adafruit splashscreen
  // internally, this will display the splashscreen.
  display.display();
  delay(1000);

  // Clear the buffer.
  display.clearDisplay();
  // Show the display buffer on the hardware.
  // NOTE: You _must_ call display after making any drawing commands
  // to make them visible on the display hardware!
  display.display();

  Serial.println("Basic 1050 Track Display Test:");

  display.setTextSize(2);
  // display.setTextColor(WHITE);
  display.setTextColor(BLACK, WHITE); // 'inverted' text
  display.setCursor(0, 5);
  display.println("Atari 1050");
  //
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 30);
  display.println("Track Display Test");
  //
  display.setCursor(10, 55);
  display.print("V.0");
  display.println(VER);
  display.display();
  // display setup for loop()
  display.clearDisplay();
  display.setCursor(5, 5);
  display.setTextSize(9);

  pinMode(N_TRACK00_Pin, INPUT_PULLUP);
  pinMode(interruptPin_NS01, INPUT_PULLUP);
  pinMode(interruptPin_NS02, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin_NS02), IRQ_NS02, RISING); //RISING, CHANGE, FALLING
  pinMode(interruptPin_NS03, INPUT_PULLUP);
  pinMode(interruptPin_NS04, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin_NS04), IRQ_NS04, RISING); //RISING, CHANGE, FALLING
}

void loop() {
  noInterrupts();
  NewTcount = Tcount;
  interrupts();

  if (digitalReadFast(N_TRACK00_Pin) == HIGH) { // if Track 0 sensor @5volts then set TRACK count to 0
    NewTcount = 0;
  }

  if (OldTcount != NewTcount) {
    OldTcount = NewTcount;
    display.clearDisplay();
    display.setCursor(10, 4);
    if (NewTcount < 10) {
      display.print("0");
    }
    display.print(NewTcount);
    display.display();
  }

}

void IRQ_NS02() {
  if (digitalReadFast(interruptPin_NS01) == HIGH) {
    Tcount ++;
  } else {
    Tcount --;
  }
  Serial.print("T NS02 :"); // debug print
  Serial.println(Tcount); // debug print
}

void IRQ_NS04() {
  if (digitalReadFast(interruptPin_NS03) == HIGH) {
    Tcount ++;
  } else {
    Tcount --;
  }
  Serial.print("T NS04 :"); // debug print
  Serial.println(Tcount); // debug print
}

TODO: draw schematics.

 

EDIT:

For some reason I can't figure out why I can't edit the code in Code tag ? 

 

Anyways

in  void loop()  

change:

  if (digitalReadFast(N_TRACK00_Pin) == HIGH) { // if Track 0 sensor @5volts then set TRACK count to 0

    NewTcount = 0;

  }

to:

  if (digitalReadFast(N_TRACK00_Pin) == HIGH) { // if Track 0 sensor @5volts then set TRACK count to 0

    NewTcount = 0;

    noInterrupts();

    Tcount = 0;

    interrupts();

  }

Edited by Chri O.
BUG FIX
  • Like 1
Link to comment
Share on other sites

Those connections will be to the 4 motor phase outputs from the 6532 to the U2 and U3 chips that drive the stepper motor

the white one is from the Track 0 sensor

 

@Chri O. thank you for sharing your scope traces, and code, I hadn't had time to scope my 1050 yet, but your

code isn't far from what I would probably have ended up with.

 

Great Job.?

 

Edit: Just tried to compile the code to my hardware, with some adjustments to the display driver, also the Pico

doesn't support DigitalReadFast, so just changed those, it compiled fine, will have to make some adjustments

for the display text, it's a bit small :) but I have Atari 1050, a little garbled text (I think due to small font) and at the

bottom V.01.

 

Next step, after fixing the display output is get it into a 1050.

 

I've not used a Teensy, they seem to be a bit pricey, what frequency does the core runs at, just in case I get some

timing issues with the Pico.

Edited by TGB1718
Update:
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...