HP85 GPIB Disk Emulator  1.0
HP85GPIBDiskEmulator
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
portio.c
Go to the documentation of this file.
1 
15 #include "user_config.h"
16 
17 #include "defines.h"
18 #include "stringsup.h"
19 #include "debug.h"
20 
25 void portio_help(int full)
26 {
27  printf("port help\n");
28  if(full)
29  {
30  printf("Note: port prefix is optional\n"
31  "port read pins [A-D]\n"
32  "port read latch [A-D]\n"
33  "port read ddr [A-D]\n"
34  "port write latch [A-D] val\n"
35  "port write pins [A-D] val\n"
36  "\n"
37  );
38  }
39 }
40 
44 int portio_tests(int argc __attribute__((unused)), char * argv[])
45 {
46  char *ptr;
47  int ind;
48 
49  ind = 0;
50  ptr = argv[ind++];
51 
52  if(!ptr)
53  return(0);
54 
55  if( MATCH(ptr,"port") )
56  {
57  ptr = argv[ind];
58  if ( !ptr || MATCH(ptr,"help") )
59  {
60  portio_help(1);
61  return(1);
62  }
63  }
64 
65  if( MATCHI(argv[ind],"read") )
66  {
67  if( MATCHI(argv[ind+1],"pins") )
68  {
69  if( MATCHI(argv[ind+2],"A"))
70  {
71  printf("Port pins A RD:[%02XH]\n", 0xff & GPIO_PORT_PINS_RD(PORTA) );
72  return (1);
73  }
74  if( MATCHI(argv[ind+2],"B"))
75  {
76  printf("Port pins B RD:[%02XH]\n", 0xff & GPIO_PORT_PINS_RD(PORTB) );
77  return (1);
78  }
79  if( MATCHI(argv[ind+2],"C"))
80  {
81  printf("Port pins C RD:[%02XH]\n", 0xff & GPIO_PORT_PINS_RD(PORTC) );
82  return (1);
83  }
84  if( MATCHI(argv[ind+2],"D"))
85  {
86  printf("Port pins D RD:[%02XH]\n", 0xff & GPIO_PORT_PINS_RD(PORTD) );
87  return (1);
88  }
89  }
90  if( MATCHI(argv[ind+1],"latch") )
91  {
92  if( MATCHI(argv[ind+2],"A"))
93  {
94  printf("Port latch A RD:[%02XH]\n", 0xff & GPIO_PORT_LATCH_RD(PORTA) );
95  return (1);
96  }
97  if( MATCHI(argv[ind+2],"B"))
98  {
99  printf("Port latch B RD:[%02XH]\n", 0xff & GPIO_PORT_LATCH_RD(PORTB) );
100  return (1);
101  }
102  if( MATCHI(argv[ind+2],"C"))
103  {
104  printf("Port latch C RD:[%02XH]\n", 0xff & GPIO_PORT_LATCH_RD(PORTC) );
105  return (1);
106  }
107  if( MATCHI(argv[ind+2],"D"))
108  {
109  printf("Port latch D RD:[%02XH]\n", 0xff & GPIO_PORT_LATCH_RD(PORTD) );
110  return (1);
111  }
112  }
113  if( MATCHI(argv[ind+1],"ddr") )
114  {
115  if( MATCHI(argv[ind+2],"A"))
116  {
117  printf("Port ddr A RD:[%02XH]\n", 0xff & GPIO_PORT_DDR_RD(PORTA) );
118  return (1);
119  }
120  if( MATCHI(argv[ind+2],"B"))
121  {
122  printf("Port ddr B RD:[%02XH]\n", 0xff & GPIO_PORT_DDR_RD(PORTB) );
123  return (1);
124  }
125  if( MATCHI(argv[ind+2],"C"))
126  {
127  printf("Port ddr C RD:[%02XH]\n", 0xff & GPIO_PORT_DDR_RD(PORTC) );
128  return (1);
129  }
130  if( MATCHI(argv[ind+2],"D"))
131  {
132  printf("Port ddr D RD:[%02XH]\n", 0xff & GPIO_PORT_DDR_RD(PORTD) );
133  return (1);
134  }
135  }
136  }
137 
138 // port write
139  if( MATCHI(argv[ind],"write") )
140  {
141  uint8_t val;
142  if( MATCHI(argv[ind+1],"pins") )
143  {
144  val = get_value(argv[ind+3]);
145 
146  if( MATCHI(argv[ind+2],"A"))
147  {
148  GPIO_PORT_WR(PORTA,val);
149  return (1);
150  }
151  if( MATCHI(argv[ind+2],"B"))
152  {
153  GPIO_PORT_WR(PORTB,val);
154  return (1);
155  }
156  if( MATCHI(argv[ind+2],"C"))
157  {
158  GPIO_PORT_WR(PORTC,val);
159  return (1);
160  }
161  if( MATCHI(argv[ind+2],"D"))
162  {
163  GPIO_PORT_WR(PORTD,val);
164  return (1);
165  }
166  }
167  if( MATCHI(argv[ind+1],"latch") )
168  {
169 
170  val = get_value(argv[ind+3]);
171 
172  if( MATCHI(argv[ind+2],"A"))
173  {
174  GPIO_PORT_LATCH_WR(PORTA,val);
175  return (1);
176  }
177  if( MATCHI(argv[ind+2],"B"))
178  {
179  GPIO_PORT_LATCH_WR(PORTB,val);
180  return (1);
181  }
182  if( MATCHI(argv[ind+2],"C"))
183  {
184  GPIO_PORT_LATCH_WR(PORTC,val);
185  return (1);
186  }
187  if( MATCHI(argv[ind+2],"D"))
188  {
189  GPIO_PORT_LATCH_WR(PORTD,val);
190  return (1);
191  }
192  }
193  if( MATCHI(argv[ind+1],"ddr") )
194  {
195 
196  val = get_value(argv[ind+3]);
197 
198  if( MATCHI(argv[ind+2],"A"))
199  {
200  GPIO_PORT_DDR_WR(PORTA,val);
201  return (1);
202  }
203  if( MATCHI(argv[ind+2],"B"))
204  {
205  GPIO_PORT_DDR_WR(PORTB,val);
206  return (1);
207  }
208  if( MATCHI(argv[ind+2],"C"))
209  {
210  GPIO_PORT_DDR_WR(PORTC,val);
211  return (1);
212  }
213  if( MATCHI(argv[ind+2],"D"))
214  {
215  GPIO_PORT_DDR_WR(PORTD,val);
216  return (1);
217  }
218  }
219  } // port write
220  return(0);
221 }
get_value
MEMSPACE int32_t get_value(char *str)
get a number
Definition: parsing.c:432
printf
MEMSPACE int printf(const char *format,...)
MATCH
MEMSPACE int MATCH(char *str, char *pat)
Compare two strings.
Definition: parsing.c:143
MATCHI
MEMSPACE int MATCHI(char *str, char *pat)
Compare two strings without case.
Definition: parsing.c:183
stringsup.h
Various string and character functions.
defines.h
GPIB, AMIGO, SS80 and device defines.
portio_tests
int portio_tests(int argc __attribute__((unused)), char *argv[])
PORT user tests User invoked PORT functions and tasks.
Definition: portio.c:44
user_config.h
Master Include for FatFs, RTC, Timers AVR8 - Part of HP85 disk emulator.
portio_help
void portio_help(int full)
Help Menu for AVR PORT IO functions See: int port_tests(char *str)
Definition: portio.c:25
debug.h